Qt 等待QProcess完成或持续时间超过

Qt 等待QProcess完成或持续时间超过,qt,pthreads,wait,qthread,qprocess,Qt,Pthreads,Wait,Qthread,Qprocess,我正试图找到以下情况的解决方案: QProcess应运行命令,并在达到所需持续时间或命令完成时停止执行该命令。此QProcess由QThread工作线程启动 这可以通过以下方法轻松实现: QProcess task("executedTool -parameters"); task.start(); task.waitForFinished(desired_max_duration_in_ms); 但也必须有一个暂停洞的功能。 我可以通过pthread信号轻松暂停QProcess: kill(

我正试图找到以下情况的解决方案:

QProcess应运行命令,并在达到所需持续时间或命令完成时停止执行该命令。此QProcess由QThread工作线程启动

这可以通过以下方法轻松实现:

QProcess task("executedTool -parameters");
task.start();
task.waitForFinished(desired_max_duration_in_ms);
但也必须有一个暂停洞的功能。 我可以通过pthread信号轻松暂停QProcess:

kill(task_.pid(), SIGSTOP);

但是,当QProcess暂停时,waitForFinished持续时间继续运行并超过

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

一个简单易行的解决方案是自旋锁。 我用while循环代替waitForFinished(期望的持续时间),每个循环睡眠100毫秒。 该循环的条件是系统时间小于启动时的系统时间加上所需的持续时间。设置paused_uu变量时,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;
  }
}
qint64 ms_start=QDateTime::currentMSecsSinceEpoch();
qint64 ms_end=ms_start+(行李列表)->at(i)->getDuration()*1000)+1500;
而(QDateTime::currentMSecsSinceEpoch()isRunning())
{
睡眠线程::msleep(100);
如果(暂停)
{

qDebug()我还没有机会再次检查这个问题,但是您可以像暂停一样暂停它,然后执行
task.setProcessState(QProcess::NotRunning)
指示进程不再运行。我认为这应该停止waitForFinished,但我不是100%确定。感谢您的提示。不幸的是,它没有停止waitForFinished,它仍然在运行。我尝试了另一种方法,现在正在工作。如果您感兴趣,请参见下文:-)。奇怪的是,我认为状态是c绞死也会停止等待。至少你找到了解决办法。
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;
  }
}