Russian Qt Forum
Ноябрь 22, 2024, 21:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess нет завершения процесса  (Прочитано 3730 раз)
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 сервер вызывает свои методы в отдельном потоке.
Как тут быть? В главном потоке приложения запускать - плохая идея, т.к много надо будет одновременно делать запусков виртуалок.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Январь 20, 2015, 17:58 »

Код
C++ (Qt)
bool QProcess::​waitForFinished(int msecs = 30000)
 
Процесс успевает отработать за 30 секунд?
Записан
Fat-Zer
Гость
« Ответ #2 : Январь 20, 2015, 19:31 »

Цитата: RedDog
Виртуалка запускается, но waitForFinished(); возвращает false
он тянет 30 секунд или возвращается сразу? если процесс завершается до waitForFinished(), то он и будет возвращать false...
Записан
RedDog
Гость
« Ответ #3 : Январь 21, 2015, 08:59 »

Процесс успевает отработать за 30 секунд?
Да успевает.
Я смотрю по монитору процессов, появляется VBoxManage работает секунды 2-3, запускает еще 2-3 процесса ВиртуалБокса и сам умирает.
Ставил waitForFinished(-1) уходил на долго, минут на 30-40, пришел, все ждет завершения.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.