重用 QProcess 对象 (Qt 4.8)

Posted

技术标签:

【中文标题】重用 QProcess 对象 (Qt 4.8)【英文标题】:Reusing a QProcess object (Qt 4.8) 【发布时间】:2015-08-01 09:18:52 【问题描述】:

给定以下代码:

QProcess myProcess;

myProcess.setProcessChannelMode(QProcess::ForwardedChannels);

myProcess.start(/* whatever */);
myProcess.closeWriteChannel();

// More code, like waitForStarted() and other specifics.

myProcess.start(/* whatever */); // Line (1)

第(1)行之后,新进程的标准输入通道是打开还是关闭?我的意思是,QProcess 是否会记住您对每个新抛出的进程的选择,还是每次都必须设置它们?在这种情况下,哪些 QProcess 属性会重置,哪些不会?

【问题讨论】:

启动是异步的,如果要确保启动完成(或失败),调用waitForStarted()。我会考虑为每个进程运行创建一个新的 QProcess 对象。 也许我应该在问题中提到这一点,但是在“//更多代码”注释下的代码中省略了您的考虑。 好的,我已经提到过了。你是第二个警告我的人。 【参考方案1】:
myProcess.start(/* whatever */); // Line (1)

您应该在第 (1) 行收到“QProcess::start: Process is already running”警告..​​....

【讨论】:

假设在“//更多代码”中有一个waitForFinished()调用。 @Peregring-lk :据我所知,每次都必须设置 QProcess...即使您可以交叉检查qDebug()<<myProcess.isOpen(); 以确保...

以上是关于重用 QProcess 对象 (Qt 4.8)的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 控制台应用程序中读写 QProcess

设计:重用 QProcess 实例,还是再次实例化?

Qt通过QProcess启动进程并传递命令行参数

Qt通过QProcess启动进程并传递命令行参数

在 Qt 中获取输出:'QProcess::start()' 和 'QProcess:readAllStandardOutPut()'

Qt QProcess