Russian Qt Forum

Qt => Общие вопросы => Тема начата: kn0pka от Апрель 03, 2009, 10:34



Название: QProcess: запуск и ожидание завершения процесса
Отправлено: kn0pka от Апрель 03, 2009, 10:34
В GUI в ходе процесса создается текстовый файл, надо дождаться, когда этот файл запишется полностью, а потом запустить другой процесс, который этот файл использует:
Код:
    process = new QProcess(this);
    ...
    process->setStandardOutputFile(fileName);
    process->start(program);
    process->waitForFinished();
   
    process2 = new QProcess(this);
    ...
    process2->setStandardInputFile(fileName);
    ...
Если файл большой, то пока идет ожидание окончания процесса, всё пугающе виснет. В документации как раз сказано, что "Calling this function from the main (GUI) thread might cause your user interface to freeze". Если заменить
Код:
    process->start(program);
    process->waitForFinished();
на
Код:
    process->execute(program);
, то процесс вобще не выполняется.
Есть какая-нибудь альтернатива для waitForFinished() в GUI?


Название: Re: QProcess: запуск и ожидание завершения процесса
Отправлено: pastor от Апрель 03, 2009, 10:37
Да, есть. Использовать сигналы\слоты, а именно ловить сигнал:

Цитировать
void QProcess::finished ( int exitCode, QProcess::ExitStatus exitStatus )   [signal]


Название: Re: QProcess: запуск и ожидание завершения процесса
Отправлено: kn0pka от Апрель 03, 2009, 10:41
Спасибо.


Название: Re: QProcess: запуск и ожидание завершения процесса
Отправлено: Tonal от Апрель 03, 2009, 11:23
Этож какой должен быть размер файлика...
Если он тебе не не нужен ни для чего, кроме коммуникации этих процессов, то посмотри на функцию setStandardOutputProcess. :)


Название: Re: QProcess: запуск и ожидание завершения процесса
Отправлено: kn0pka от Апрель 03, 2009, 13:03
Размер файла может быть несколько метров, он нужный.