使用qt终止进程而不会引发错误

时间:2019-07-15 11:49:16

标签: qt

我需要在不引起任何错误的情况下终止进程。我需要区分进程崩溃和用户故意杀死进程的时间。我看到在Windows上,只能使用.kill()而不是.terminate()关闭命令行进程。

如果我连接.errorOccurred(),即使我有意按下该按钮以终止进程,该函数也会被调用。有办法避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

QObject::blockSignals(),可以暂时阻止任何信号的发射。 但是,我会避免使用它,而应在处理该过程的代码中对其进行处理。

两个选项:

  1. 在终止之前断开进程的信号:

    m_process.disconnect(this);
    m_process.kill();
    
  2. 请记住您处于“杀死状态”,请忽略该信号/以其他方式处理它:

    m_killingProcess = true; // member variable defaulting to false
    m_process.kill();
    

    在连接到errorOccurred的插槽中:

    void Foo::processErrorOccurred(QProcess::ProcessError error)
    {
        if (m_killingProcess) {
            // do nothing?
            return;
        }
    
        // handle process error (when not killing)
    }