C++ 设计:重新使用QProcess实例,还是再次实例化?

C++ 设计:重新使用QProcess实例,还是再次实例化?,c++,multithreading,performance,qt,process,C++,Multithreading,Performance,Qt,Process,我有一个应用程序,它从不同的线程发出大量命令行操作,例如在控制台上。为此,我使用QProcess Qt C++: 以上方法很好。如果没有QProcess::closeWriteChannel,我无法让它在任何置换下正常工作,但如果有人知道下面的选项,我会很感兴趣 我的理解是,因为我调用了QProcess::closeWriteChannel,所以我永远无法重新打开该通道。然而,由于我完成了实例化QProcess和设置QProcessEnvironment的工作,因此我只能再次启动该进程,从而重新

我有一个应用程序,它从不同的线程发出大量命令行操作,例如在控制台上。为此,我使用QProcess Qt C++:

以上方法很好。如果没有QProcess::closeWriteChannel,我无法让它在任何置换下正常工作,但如果有人知道下面的选项,我会很感兴趣

我的理解是,因为我调用了QProcess::closeWriteChannel,所以我永远无法重新打开该通道。然而,由于我完成了实例化QProcess和设置QProcessEnvironment的工作,因此我只能再次启动该进程,从而重新打开写入通道

// ...after previous run:
p->start("cmd.exe");
// ...use it again...
这也行

因此,我比较了两种设计方案:

每次实例化QProcess。除了单个命令行调用之外,没有重复使用。简单

重新使用QProcess。记住哪个QProcess实例已经设置了哪个QProcessEnvironment,这样我就可以在适当的环境中运行命令。更快无需重新实例化QProcess,无需重新设置QProcess环境,但需要更多的簿记

问题:实例化QProcess和设置QProcess环境的运行时开销有多大

重要的?我需要跨多个线程执行数千个命令行操作。如果它是大的,那就把我引向2个能干的人,我已经找到了方法。否则,1非常简单,我不想无缘无故地把事情复杂化

是的,过早优化是万恶之源。我不想那么做。这个系统需要大规模扩展

想法

以上方法很好。我无法让它在任何情况下正常工作 没有QProcess::closeWriteChannel的置换,但我会 如果有人知道某个选项,请参见下文

目前您正在写入\n字符。 你需要把它们写成一个字符

p->write(QString("dir") + '\n');
而不是

p->write("dir\n");
p->closeWriteChannel();

使用此方法,写入通道保持打开状态,您可以在流程查询输入时做出反应。

简单回答:测量它:我怀疑重用QProcess实例是否值得额外的复杂性,因为创建本机流程并实际运行它们将产生更大的开销。但你只能从分析中得到一个明确的答案。
p->write(QString("dir") + '\n');
p->write("dir\n");
p->closeWriteChannel();