如何并行启动几个QProcess并阻塞,直到所有QProcess都退出
How to start a few QProcess in parallel and block until all of them have exited?
我想并行启动几个QProcess
,并阻止它们,直到它们全部退出。
我想把每个QProcess*
放在一个向量中,并把finished()
信号连接到一个计数器。主线程正忙着等待,直到计数器达到向量的大小。
然而,我担心计数器可能不是线程安全的,而且效率也不是很高。
如果将所有finished((信号连接到主线程中的单个对象,则无需担心保护计数器。每个信号都将在主线程中依次排队和处理。只需确保在连接时使用Qt::QueuedConnection即可。
Amartel在让它们运行之前进行检查以确保它们启动是正确的。
编辑:如前所述(当进程在Qt中崩溃时,是否已发出QProcess::finished?(,您也可以考虑连接到error((信号。
此外,请考虑QtConcurrent。它是为这个明确的目的而设计的。
您绝对应该使用QMutex
来保护计数器。
我认为效率没有任何问题。你害怕什么?
尽管存在一个隐藏的潜在问题——一个进程可能不会发出finished()
信号。例如,如果它无法启动,它将用QProcess::FailedToStart
代码发出QProcess::error()
,如果它崩溃,它将使用QProcess::Crashed
代码发出错误。在这两种情况下,你的线程将等待永恒。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 使用QProcess执行命令,并将结果存储在QStringList中
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 退出简单while循环时出现问题
- 使用vscode调试时,GDB意外退出
- 终止 QProcess 不会终止子进程
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- pclose() 不会给我进程退出代码
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++从另一个函数退出函数
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 运行自定义可执行文件,QProcess 立即退出,退出代码为 1
- 如何并行启动几个QProcess并阻塞,直到所有QProcess都退出