Russian Qt Forum

Qt => Общие вопросы => Тема начата: cresta от Июль 05, 2007, 01:52



Название: QProcess::isRunning ()
Отправлено: cresta от Июль 05, 2007, 01:52
В чем смысл QProcess::isRunning ()???

Как можно воспользоваться этим для опеределения завершенности процесса?
Если процесс завершен, возникает segmentation fault и программа вылетает :)
Кто-нибудь видел, чтобы QProcess::isRunning () возвращала FALSE?


Название: QProcess::isRunning ()
Отправлено: pastor от Июль 05, 2007, 10:13
В чем смысл, написано в ассистанте.

Сам лично видел, что этот метод возвращает false.

Пример использования был таков:
Код:

while( proc.isRunning() )
{
     // Do something, while the process is running.
}


При этом никаких "segmentation fault" не возникало.

Qt 3.3.8 Win
Qt 3.3.6 Lin


Название: QProcess::isRunning ()
Отправлено: cresta от Июль 05, 2007, 14:27
Код:
proc->tryTerminate();
QTimer::singleShot( 10000, this, SLOT( checkProc() ) );

void Dlg::checkProc(){
    if ( proc !=0 && proc->isRunning() ) qDebug ("running");
    else qDebug ("exited");
}

на qt 3.3.4 никакого qDebug, только segmentation fault :)
При этом указатель валидный (тот же, что и до tryTerminate).

В поиске тоже видел тему про segmentation fault при вызове isRunning() после уничтожения процесса.

А есть какой-нибудь способ определения безопасности чтения/записи по указателю? Типа BadRead/WritePtr.
Или какой-нибудь класс для перехвата ошибок типа segmentation fault?


Название: QProcess::isRunning ()
Отправлено: pastor от Июль 05, 2007, 17:02
Попробуй вместо proc->tryTerminate() написать proc->kill(). Что-то измениться?

добавлено спустя 9 минут:

 Да, и ещё.. а в какой строке метода isRunning падает прога?


Название: QProcess::isRunning ()
Отправлено: cresta от Июль 06, 2007, 01:02
с proc->kill() та же история.

А в какой строке метода ошибка - не знаю - у меня нет исходников qt, чтобы анализировать их.