Дизайн: повторно использовать экземпляр QProcess или создать экземпляр еще раз? - PullRequest
1 голос
/ 19 декабря 2011

У меня есть приложение, которое выдает МНОЖЕСТВО операций командной строки (например, на «консоли») из разных потоков. Для этого я использую QProcess (Qt C ++):

  QProcess* p = new QProcess();
  // ...maybe set QProcessEnvironment, set up stdout/stderr, etc....
  p->start("cmd.exe");
  p->write("dir\n");
  p->closeWriteChannel();
  p->waitForBytesWritten(-1/*forever*/);
  p->waitForReadyRead(-1/*forever*/);
  p->waitForFinished(-1/*forever*/);
  // ...read all text from process

Выше работает нормально. Я не мог заставить его работать должным образом при любой перестановке без QProcess::closeWriteChannel(), но мне было бы интересно, если кто-нибудь знает о какой-либо опции (см. Ниже).

Насколько я понимаю, так как я позвонил QProcess::closeWriteChannel(), я никогда не смогу открыть этот канал заново. Тем не менее, поскольку я прошел через создание экземпляра QProcess и установку QProcessEnvironment, я мог просто запустить процесс снова (что снова открывает канал записи).

// ...after previous run:
p->start("cmd.exe");
// ...use it again...

Это тоже отлично работает.

Итак, я сравниваю ДВА варианта дизайна:

  1. Каждый раз создавать QProcess. Нет повторного использования, кроме одного вызова командной строки. Простой.

  2. Повторное использование QProcess. Выполнить работу по «запоминанию», какой экземпляр QProcess имеет, какой QProcessEnvironment уже настроен, чтобы я мог запускать команды в соответствующей среде , Быстрее (без повторного создания QProcess, без перенастройки QProcessEnvironment()), но требуется больше «бухгалтерского учета».

ВОПРОС: Насколько значительны накладные расходы времени выполнения для создания экземпляра QProcess и настройки QProcessEnvironment?

Существенная? Мне нужно выполнить много тысяч операций командной строки во многих потоках. Если оно «большое», это направляет меня к (2) (выполнимо, я выяснил как). В противном случае (1) действительно просто, и я не хочу усложнять вещи без причины.

Да, «Преждевременная оптимизация - корень всего зла». Я не пытаюсь это сделать. Эту систему нужно масштабировать.

Мысли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...