【问题标题】:Qt avoid warning 'QProcess: destroyed while process still runningQt避免警告'QProcess:在进程仍在运行时被破坏
【发布时间】:2023-03-31 07:39:01
【问题描述】:

最简单的代码:

void test
{
    QProcess p;
    p.start("sleep 10");
    p.waitForBytesWritten();
    p.waitForFinished(1);
}

当然,该过程不能在函数结束前结束,所以会显示警告信息:

 QProcess: Destroyed while process ("sleep") is still running.

我希望不显示此消息 - 我应该在函数结束之前自行销毁进程,但我找不到正确执行此操作的方法:p.~QProcess(), p.terminate(), p .kill() 帮不了我。

注意:我不想等待进程执行,我自己在运行时将其杀死。

【问题讨论】:

  • 为什么 p.terminate(), p.kill() 帮不了你?
  • int main() { QProcess prc; prc.start("睡眠 10"); prc.waitForBytesWritten(); prc.waitForFinished(1); prc.terminate(); prc.kill();返回0; } // 仍然警告

标签: c++ qt qtcore qprocess


【解决方案1】:

您可以根据自己的意愿明确终止或终止该进程。然而,这还不够,因为您实际上需要等待进程终止。 “kill”意味着它将在 Unix 上向进程发送 SIGKILL 信号,这也需要一些时间才能真正完成。

因此,你会这样写:

main.cpp

#include <QProcess>

int main()
{
    QProcess p;
    p.start("sleep 10");
    p.waitForBytesWritten();
    if (!p.waitForFinished(1)) {
        p.kill();
        p.waitForFinished(1);
    }
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

【讨论】:

  • 这是一个正确的解决方案,帮助我抑制了警告。但是,我建议在p.waitForFinished(1); 中使用比 1 毫秒更长的超时时间。我认为,在某些情况下,进程终止可能需要更长的时间。我使用 -1 没有超时(相信操作系统会在合理的时间内真正杀死进程)。
最近更新 更多