我想并行启动一些QProcess
,然后阻止它们全部退出。
我想将每个QProcess*
放在一个向量中,并将finished()
信号连接到一个计数器。主线程忙等待计数器达到向量的大小。
但是,我担心计数器可能不是线程安全的,并且效率不高。
答案 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
代码发出错误。在这两种情况下,你的线程都会等待永恒。