我想QProcess
并行启动一些,并阻塞直到它们都退出。
我正在考虑将每个QProcess*
放在一个向量中,并将finished()
信号连接到一个计数器。主线程忙等待,直到计数器达到向量的大小。
但是,我担心计数器可能不是线程安全的,而且效率不是很高。
如果将所有finished() 信号连接到主线程中的单个对象,则无需担心保护计数器。每个信号将在主线程中依次排队和处理。只要确保在连接时使用Qt::QueuedConnection 即可。
Amartel 在让它们运行之前检查以确保它们启动是正确的。
编辑: 正如这里提到的(当 Qt 中的进程崩溃时 QProcess::finished 发出了吗?),您也可以考虑连接到 error() 信号。
另外,考虑QtConcurrent。它是为这个明确的目的而设计的。
你绝对应该用 保护柜台QMutex
。
而且我认为效率没有任何问题。你有什么好怕的呢?
尽管存在一个隐藏的潜在问题 - 进程可能不会发出finished()
信号。例如,如果它无法启动——它会发出代码QProcess::error()
,QProcess::FailedToStart
如果它崩溃——它会发出QProcess::Crashed
代码错误。在这两种情况下,您的线程都将等待永恒。