1

我想QProcess并行启动一些,并阻塞直到它们都退出。

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

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

4

2 回答 2

4

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

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

编辑: 正如这里提到的(当 Qt 中的进程崩溃时 QProcess::finished 发出了吗?),您也可以考虑连接到 error() 信号。

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

于 2013-04-09T18:12:34.003 回答
1

你绝对应该用 保护柜台QMutex

而且我认为效率没有任何问题。你有什么好怕的呢?

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

于 2013-04-09T17:56:30.630 回答