Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: RedDog от Январь 20, 2015, 17:17



Название: QProcess нет завершения процесса
Отправлено: RedDog от Январь 20, 2015, 17:17
Имеется xmlrpc-c сервер, на команды от которого надо запускать виртуальную машину.

Код:
bool CProcessManger::StartVM(const std::string &VMID)
{
    QProcess startProc;

    QString runCommand = QString("VBoxManage");
    QStringList args;
    args << "startvm" << QString::fromStdString( VMID ) << "--type" << "headless";
    startProc.start( runCommand, args );

    startProc.waitForStarted();
    startProc.waitForFinished();
    QString procAnswer = startProc.readAll();
    if( procAnswer.size() == 0 )
    {
        procAnswer = startProc.readAllStandardError();
    }
    QString findStr = QString("VM \"%1\" has been successfully started.").arg( QString::fromStdString( VMID ) );

    if( procAnswer.contains( findStr ) )
    {
        return true;
    }
    return false;
}
Виртуалка запускается, но waitForFinished(); возвращает false, процесс VBoxManage сам по себе умирает, смотрел по PID-у.
Тот же самый код в тестовом приложении в GUI потоке отрабатывает нормально, т.е дожидается закрытия процесса waitForFinished()==true
Имеется мысль, что происходит это из за того, что xmlrpc сервер вызывает свои методы в отдельном потоке.
Как тут быть? В главном потоке приложения запускать - плохая идея, т.к много надо будет одновременно делать запусков виртуалок.


Название: Re: QProcess нет завершения процесса
Отправлено: __Heaven__ от Январь 20, 2015, 17:58
Код
C++ (Qt)
bool QProcess::​waitForFinished(int msecs = 30000)
 
Процесс успевает отработать за 30 секунд?


Название: Re: QProcess нет завершения процесса
Отправлено: Fat-Zer от Январь 20, 2015, 19:31
Цитата: RedDog
Виртуалка запускается, но waitForFinished(); возвращает false
он тянет 30 секунд или возвращается сразу? если процесс завершается до waitForFinished(), то он и будет возвращать false...


Название: Re: QProcess нет завершения процесса
Отправлено: RedDog от Январь 21, 2015, 08:59
Процесс успевает отработать за 30 секунд?
Да успевает.
Я смотрю по монитору процессов, появляется VBoxManage работает секунды 2-3, запускает еще 2-3 процесса ВиртуалБокса и сам умирает.
Ставил waitForFinished(-1) уходил на долго, минут на 30-40, пришел, все ждет завершения.