Имеется 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 сервер вызывает свои методы в отдельном потоке.
Как тут быть? В главном потоке приложения запускать - плохая идея, т.к много надо будет одновременно делать запусков виртуалок.