[Interest] QProcess overload slot connection

Thiago Macieira thiago.macieira at intel.com
Wed Mar 13 23:02:17 CET 2019


On Wednesday, 13 March 2019 14:08:19 PDT Jason H wrote:
> In the situation that there's a problem, you end up waiting for timeout.
> So:
> connect(process,QOverload<int,
> QProcess::ExitStatus>::of(&QProcess::finished), &loop, &QEventLoop::quit);
> becomes:
> connect(process, &QProcess::stateChanged,[=, &loop](QProcess::ProcessState
> state) { qDebug() << "stateCanged" << state;
>         if (state == QProcess::ProcessState::NotRunning) loop.quit();
> });
> 
> Because the NotRunning will occur always, and immediately, and finished
> won't. Failed command:
> stateCanged QProcess::Starting
> stateCanged QProcess::NotRunning
> // no finished!

Good catch. A process that didn't start can't finish.

Another way would be to waitForStarted() before entering the loop. Unlike the 
other waitFor functions, waitForStarted can be relied upon to finish rather 
quickly, since it only depends on the current thread anyway. If it takes long, 
then it's because the entire system is swapping hard and taking time to do 
everything.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products





More information about the Interest mailing list