Russian Qt Forum

Qt => Вопросы новичков => Тема начата: koldun90 от Октябрь 15, 2015, 10:28



Название: вопрос по qprocess
Отправлено: koldun90 от Октябрь 15, 2015, 10:28
Здравствуйте вопрос по QProcess
смысл в том что мне для тестирования сервера нужно много раз запустить клиент
собственно программа она должна запустить 10 раз клиент
проблема в том что если я использую:
1)execute- код блокируется
2)startDetached-- происходит запуск всех процессов в цикле но после закрытия программы процессы все виснут в системе(утечка)
3)start-- пишет QProcess: Destroyed while process is still running.

Код
C++ (Qt)
#include <QCoreApplication>
#include <QProcess>
#include <QFile>
 
 
int main(int argc, char *argv[])
{
 
   for (int i=0;i<10;i++)
   {
       QString kom="/potokklient/build-potokklien-Desktop-Debug/potokklien";
       QProcess vec;
       vec.start(kom);
 
   }
   exit(0);
}
мне нужно как я понял сделать start чтобы все дочерние процессы после завершения данного кода удались но не получается...


Название: Re: вопрос по qprocess
Отправлено: __Heaven__ от Октябрь 15, 2015, 11:40
Имхо, на каждый запуск нужен отдельный экземпляр QProcess


Название: Re: вопрос по qprocess
Отправлено: __Heaven__ от Октябрь 15, 2015, 11:42
А ещё у вас программа завершается раньше, чем завершаются процессы. См. QProcess::waitForFinished.


Название: Re: вопрос по qprocess
Отправлено: Hellraiser от Октябрь 15, 2015, 11:44
Имхо, на каждый запуск нужен отдельный экземпляр QProcess
На каждый запуск и создается отдельный экземпляр. Но проблема в том, что это создается на стеке и при потере видимости (а это будет на следующем шаге цикла) произойдет разрушение QProcess.


Название: Re: вопрос по qprocess
Отправлено: qate от Октябрь 15, 2015, 12:57
что такое "клиент" - другая отдельная программа ?


Название: Re: вопрос по qprocess
Отправлено: __Heaven__ от Октябрь 15, 2015, 13:07
Дык расширьте область видимости QProcess и не давайте программе завершиться, пока все процессы не отработают.
Код
C++ (Qt)
QProcess vec[10];
for(int i = 0; i < 10; ++i){
   QString kom="/potokklient/build-potokklien-Desktop-Debug/potokklien";
   vec[i].start(kom);
}
for(int i = 0; i < 10; ++i){
   vec[i].waitForFinished(100500);
}