c++ - 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 运行良好)。但是可以做些什么呢?