无法终止QTCreator线程

时间:2013-06-06 11:37:48

标签: c++ multithreading qt qt-creator qthread

作为我的QT应用程序的一部分,我使用QThread来ping我网络上的各种机器。在run方法中,我有一个while循环连续读取ping的结果。在while循环条件子句中,我有一个布尔变量,我设置它从循环中退出,因此也退出run方法。

当我关闭我的QT应用程序时,它会因以下错误而失败。

QThread:线程仍在运行时被破坏。

我尝试在线程的析构函数中添加对wait()的调用,但应用程序在那时停止。我确定我已经退出了run方法但是等待方法出于某种原因线程仍在运行。知道为什么会这样吗?

以下是我的run方法中的代码:

void OCU::PingMars::run()
{
    FILE *fp;
    char path[1035];
    QVariant new_datarow;
    QStringListModel *mRobot;

    mRobot=&OCU::MainWindow::mMars;

    /* Open the command for reading. */
    fp = popen("ping 192.168.47.154", "r");
    if (fp == NULL) {
        mRobot->insertRows(mRobot->rowCount(),1);
        new_datarow = QVariant(QString("Failed to run command"));
        mRobot->setData(mRobot->index(mRobot->rowCount()-1),new_datarow);
        return;
    }

    /* Read the output a line at a time - output it. */
    while (fgets(path, sizeof(path)-1, fp) != NULL && stopThread==false) {
        mRobot->insertRows(mRobot->rowCount(),1);
        new_datarow = QVariant(QString(path));
        mRobot->setData(mRobot->index(mRobot->rowCount()-1),new_datarow);
        emit EOPMars();
    }

    /* close */
    pclose(fp);
   // exit();
}

线程析构函数:

OCU::PingMars::~PingMars() {

     wait();
}

0 个答案:

没有答案