qt - 等待QProcess完成或者持续时间超过

  显示原文与译文双语对照的内容
0 0

我正在尝试找到一种解决以下情况的方法:

当达到所需持续时间或者命令完成时,QProcess应运行命令并停止执行。 这里QProcess由 QThread Worker启动。

这可以通过使用以下方法轻松完成:


QProcess task("executedTool -parameters");
task.start();
task.waitForFinished(desired_max_duration_in_ms);

但也必须有一个功能来暂停黑洞。 我可以通过pthread信号轻松地暂停 QProcess:


kill(task_.pid(), SIGSTOP);


kill(task_.pid(), SIGCONT);

但waitForFinished持续时间继续运行并超过QProcess暂停时的状态。

有谁知道怎么做? 当我可以暂停孔 QThread,运行QProcess和等待命令时,等待时间也会暂停。 但是如何获得QThread的pid? 是否有更好的Qt解决方案来暂停QProcess暂停?

时间: 原作者:

0 0

一个简单而简单的解决方案是自旋旋转。 我用一个while循环替换了 waitForFinished(desired_duration),每次循环 100ms 个循环。 这里循环的条件是系统时间少于系统时间,以及所需的持续时间。 当paused_变量被设置为 100ms 时,将被添加到所需的持续时间,所以它仍然推动测量时间。


qint64 ms_start = QDateTime::currentMSecsSinceEpoch();
qint64 ms_end = ms_start + (bag_list_->at(i)->getDuration() * 1000) + 1500;

while (QDateTime::currentMSecsSinceEpoch() <ms_end && worker_thread_->isRunning())
{
 SleepThread::msleep(100);
 if (paused_)
 {
 qDebug() <<"add 100";
 ms_end += 100;
 }
}

这可能不是一个好的解决方案,但它现在正在运行。

如果有人有其他的想法我很高兴听到他们。

原作者:
...