QProcess导致“R6016 - 没有足够的空间用于线程数据”

时间:2017-07-21 17:07:28

标签: c++ qt qprocess

使用QProcess启动ipconfig会导致崩溃,并显示错误对话框

  

运行时错误!

     

C:\的Windows \ Syswow64资料\ IPCONFIG.EXE

     

R6016

     
      
  • 没有足够的空间用于线程数据
  •   

在某些计算机上(问题发生的地方并非如此),请参阅image

我是否错误地使用了QProcess

我测试过:

  • Windows 7 64ibt
  • Windows 8/10

使用:

  • QT5.8.0
  • Mingw 5.3 32bit

最小代码:

#include <QApplication>
#include <QWidget>
#include <QTimer>
#include <QProcess>
#include <QRegExp>
#include <QDebug>

QProcess *checkGateway;

void detectGateway() {
    //Start ipconfig
    QProcess* proc = new QProcess();
    QObject::connect(proc, static_cast<void (QProcess::*)(int)>(&QProcess::finished), [proc](int exitStatus) {
        Q_UNUSED(exitStatus);

        /* parse */

        int testAfter = 1000; //1 sec

        QRegExp rx("gateway[^\\r\\n]+(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})");
        rx.setCaseSensitivity(Qt::CaseInsensitive);

        const QString getResp = proc->readAll();

        if (rx.indexIn(getResp) > -1) {
            qDebug() << "Gateway:" << rx.cap(1);
            testAfter = 5000; //5 sec
        } else {
            qDebug() << "Not found";
        }

        QTimer::singleShot(testAfter, [](){
            detectGateway();
        });

        /* parse */

    });
    proc->start("ipconfig");
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget w;

    detectGateway();

    w.show();

    return a.exec();
}

0 个答案:

没有答案