如何并行启动几个QProcess并阻塞,直到所有QProcess都退出

How to start a few QProcess in parallel and block until all of them have exited?

本文关键字:QProcess 退出 启动 何并行 并行 几个      更新时间:2023-10-16

我想并行启动几个QProcess,并阻止它们,直到它们全部退出。

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

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

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

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

编辑:如前所述(当进程在Qt中崩溃时,是否已发出QProcess::finished?(,您也可以考虑连接到error((信号。

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

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

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

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