首页 > 解决方案 > QProcess::start 在调试模式下运行时挂起

问题描述

我有一个奇怪的问题,QProcess::start()只是挂了很长时间。

该过程是这样设置的...

在我的头文件中:

QProcess * m_wifiProcess;

在 cpp 文件中:

m_wifiProcess->setProgram( "/bin/sh" ); 
m_wifiProcess->setArguments( QStringList() << "-c" << "iw wlan0 link | grep signal" );
connect( m_wifiProcess,
         static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
         [=](int exitCode, QProcess::ExitStatus exitStatus)
            {
                qDebug() << "Wifi Process Complete";

                // Do some other stuff with the results.

            });

然后该过程稍后从以下行开始。

m_statusTicker->setInterval( (1 * 1000) );    // QTimer
connect( m_statusTicker, SIGNAL( timeout() ), this, SLOT( update() ) );

void myClass::update(void) {

     // Do other stuff

     checkWifi();
}

void myClass::checkWifi(void) {

    qDebug() << "About to start Wifi Process";
    m_wifiProcess->start();
    qDebug() << "Wifi Process Started";

}

它一直到m_wifiProcess->start()但当该行被执行时,它只是挂起并且没有到达下一qDebug()行。

有时大约一分钟后,它最终完成,并且执行前面connect语句中的代码。其他时候,我一直在等待更长的时间才放弃。

我不认为这是长时间运行的代码。类似startDetached的行做同样的事情,当在控制台中执行时,有问题的命令会立即运行。我也尝试过运行touch具有相同结果的命令。

此外,这似乎只在调试模式下运行时发生!(在 QtCreator 中)。在发布模式下,它似乎可以通过。

我唯一的猜测是它与在 QTimer 函数中运行有关。(代码中的另一个区域 QProcess 运行良好)。但是可以做些什么呢?

标签: c++qtdebuggingqt-creator

解决方案


推荐阅读