如何并行启动一些QProcess并阻止它们全部退出?

时间:2013-04-09 16:59:24

标签: c++ qt

我想并行启动一些QProcess,然后阻止它们全部退出。

我想将每个QProcess*放在一个向量中,并将finished()信号连接到一个计数器。主线程忙等待计数器达到向量的大小。

但是,我担心计数器可能不是线程安全的,并且效率不高。

2 个答案:

答案 0 :(得分:4)

如果将所有finished()信号连接到主线程中的单个对象,则无需担心保护计数器。每个信号将在主线程中依次排队和处理。只需确保在连接时使用Qt::QueuedConnection

Amartel对于检查以确保它们在让它们运行之前启动是正确的。

修改 如此处所述(Is QProcess::finished emitted when process crashes in Qt?),您也可以考虑连接到error()信号。

另外,请考虑QtConcurrent。它是为了这个明确的目的而设计的。

答案 1 :(得分:1)

您绝对应该使用QMutex保护计数器。

我认为效率没有任何问题。你害怕什么?

虽然存在一个隐藏的潜在问题 - 过程可能不会发出finished()信号。例如,如果它无法启动 - 它将使用QProcess::error()代码发出QProcess::FailedToStart,如果崩溃,它将使用QProcess::Crashed代码发出错误。在这两种情况下,你的线程都会等待永恒。