gpt4 book ai didi

qt - QProcess.startDetached() 并写入其标准输入

转载 作者:行者123 更新时间:2023-12-01 17:24:06 31 4
gpt4 key购买 nike

这段代码有什么问题?我无法写入已分离的新进程的标准输入。对我来说重要的是新流程是独立的。

QProcess commandLine;
commandLine.setWorkingDirectory("E:\\"); //does not work.
commandLine.startDetached("cmd.exe"); //works (but uses wrong working dir).
commandLine.write("echo hi\0"); //writes nothing.
commandLine.write("\n\r"); //Still nothing is written!

最佳答案

早上好。

问题在于QProcess::startDetached()是一个静态方法,它创建了一个“即发即忘”的进程。

这意味着您不能以这种方式设置工作目录。您所能做的就是调用

QProcess::startDetached (const QString &program, const QStringList &arguments, const   QString &workingDirectory);

然而,这给您带来了写入新创建进程的标准输入的问题。问题是,由于您没有 QProcess 对象,因此您无法将标准输入写入其中。可能有一个解决方案,使用静态 startDetached() 方法提供的进程句柄。

我们公司也有类似的问题。我们需要独立的进程,这些进程的运行超出了调用程序的生命周期,并且我们可以为其设置环境。从 Qt 代码来看,这似乎是不可能的。

我的解决方案是使用 QProcess 的包装器及其自己的 startDetached() 方法。它所做的实际上是在堆上创建了这个 QProcess 子类并使用其普通的 start() 方法。然而,在此模式下,进程完成后触发的信号会调用一个删除对象本身的槽:delete this;。有用。该进程是独立运行的,我们可以设置一个环境。

所以基本上不需要使用分离启动方式。只要您的 QProcess 是堆上的对象,您就可以使用普通的启动方法。如果您关心这种情况下的内存泄漏,则必须提供如上所述的类似机制。

最诚挚的问候
d

关于qt - QProcess.startDetached() 并写入其标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932354/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com