1

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

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-duration 继续运行并在 QProcess 暂停时超过。

有谁知道如何做到这一点?当我可以暂停运行 QProcess 和等待命令的孔 QThread 时,等待持续时间也会暂停。但是我怎样才能得到一个 QThread 的 pid 呢?有更好的 Qt 解决方案来暂停 QProcess 吗?

4

1 回答 1

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;
  }
}

这可能不是一个好的解决方案,但它目前正在工作。

如果有人有其他想法,我很乐意听到。

于 2013-02-21T14:04:40.707 回答