作为我的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();
}