【问题标题】:Detaching a started process分离已启动的进程
【发布时间】:2013-07-06 09:39:31
【问题描述】:

我已经使用QProcess::start() 启动了一个进程,之后我需要将其分离。我该怎么做?我在 Qt 文档中没有找到相关信息。

我知道QProcess::startDetached(),但是由于程序中有其他代码,我不能使用它(我需要分离进程的启动和分离)。

【问题讨论】:

  • 我记得几年前这是一个功能请求,但我认为它从未实现过。再说一次,我最近没有及时更新,所以我可能错过了一些东西。

标签: c++ qt


【解决方案1】:

如果您查看the implementation of QProcess::~QProcess(),您就会知道QProcess 是如何通过销毁来终止进程的。另外,请注意QProcess::setProcessState() is protected,这意味着您可以实现从QProcess 继承的QDetachableProcess,并使用方法detach() 调用setProcessState(QProcess::NotRunning); 作为解决方法。

例如:

class QDetachableProcess : public QProcess
{
public:
    QDetachableProcess(QObject *parent = 0) : QProcess(parent){}
    void detach()
    {
        this->waitForStarted();
        setProcessState(QProcess::NotRunning);
    }
};

然后你可以这样做:

QDetachableProcess process;
process.setEnvironment(QStringList() << "SOME_ENV=Value");

process.start();

process.detach();

【讨论】:

  • 最好在你的答案中包含更多的答案,而不是仅仅链接。
  • @DaveSchweisguth 谢谢。我刚刚添加了一个例子来说明清楚。
【解决方案2】:

你不能从 5.1 开始,see here。 cmets中还有一个建议,不确定是否对您的情况有用):

解决方案建议:编写一个辅助进程来启动分离的进程,并在所有设置完成后自行终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 2014-09-21
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多