LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

Еще есть такая штука, что STDOUT у процесса обычно буферизированный (построчно). Что тебе надо — non-blocking io + popen. Наверное в Qt есть какие-нибудь обертки над этим.

В любом случае, ждать в потоке GUI, как у тебя в коде:

void MainWindow::nashSlot()
{
  // ...
  proc.waitForFinished();
  // ...
}
-- это плохо. И именно из-за этого кажется, что пограмма зависла. GUI должно быть отзывчивым. По этому ждать можно только в отдельных (от GUI) потоках. А лучше всего запроэктировать так, чтоб не надо было ждать.

Как сказал выше ZweiStein QProcess::readAllStandardOutput() — похоже на non-blocking io. А QProcess::run() — обертка над popen (и другими системными вызовами).

Исправление KennyMinigun, :

Еще есть такая штука, что STDOUT у процесса обычно буферизированный (построчно). Что тебе надо — non-blocking io + popen. Наверное в Qt есть какие-нибудь обертки над этим.

В любом случае, ждать в потоке GUI, как у тебя в коде:

void MainWindow::nashSlot()
{
  // ...
  proc.waitForFinished();
  // ...
}
-- это плохо. И именно из-за этого кажется, что пограмма зависла. GUI должно быть отзывчивым. По этому ждать можно только в отдельных (от GUI) потоках. А лучше всего запроэктировать так, чтоб не надо было ждать.

Как сказал выше ZweiSten QProcess::readAllStandardOutput() — похоже на non-blocking io. А QProcess::run() — обертка над popen (и другими системными вызовами).

Исправление KennyMinigun, :

Еще есть такая штука, что STDOUT у процесса обычно буферизированный (построчно). Что тебе надо — non-blocking io + popen. Наверное в Qt есть какие-нибудь обертки над этим.

В любом случае, ждать в потоке GUI, как у тебя в коде:

void MainWindow::nashSlot()
{
  // ...
  proc.waitForFinished();
  // ...
}
-- это плохо. И именно из-за этого кажется, что пограмма зависла. GUI должно быть отзывчивым. По этому ждать можно только в отдельных (от GUI) потоках. А лучше всего запроэктировать так, чтоб не надо было ждать.

Исправление KennyMinigun, :

Еще есть такая штука, что STDOUT у процесса обычно буферизированный (построчно). Что тебе надо — non-blocking io + popen. Наверное в Qt есть какие-нибудь обертки над этим.

В любом случаеь ждать в потоке GUI, как у тебя в коде:

void MainWindow::nashSlot()
{
  // ...
  proc.waitForFinished();
  // ...
}
-- это плохо. И именно из-за этого кажется, что пограмма зависла. GUI должно быть отзывчивым. По этому ждать можно только в отдельных (от GUI) потоках. А лучше всего запроэктировать так, чтоб не надо было ждать.

Исходная версия KennyMinigun, :

Еще есть такая штука, что STDOUT у процесса обычно буферизированный (построчно). Что тебе надо — non-blocking io + popen. Наверное в Qt есть какие-нибудь обертки над этим.

В любом случае — ждать в потоке GUI, как у тебя в коде:

void MainWindow::nashSlot()
{
  // ...
  proc.waitForFinished();
  // ...
}
-- это плохо. И именно из-за этого кажется, что пограмма зависла. GUI должно быть отзывчивым. По этому ждать можно только в отдельных (от GUI) потоках. А лучше всего запроэктировать так, чтоб не надо было ждать.