QT多线程 QWaitCondition QEVENTLOOP
因为需要一个下载应用的功能,为了避免下载的过程中影响界面的使用,所以单独开了一个线程去处理这个事情。
class HHttpThread : public QThread
定义了一些变量
QNetworkAccessManager *qnam ;
//用于向服务器请求有先后顺序的线程间
QWaitCondition waitCondition ;
QMutex mutex;
然后在RUN方法中进行定义
mutex.lock();
qnam = new QNetworkAccessManager();
//关联信号和槽
connect(qnam,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
我是把URL请求放在同一个QNetworkAccessManager中进行的,
url = QString("%1?%2").arg(commonClassList::url("getConfig")).arg(readString(values));
qnam->get(QNetworkRequest(QUrl(url)));
qDebug() << "开始等待配置结果";
//服务器返回了配置结果才有必要继续进行
if(waitCondition.wait(&mutex,60000))
{
qDebug()<<"获取到配置结果,继续下一步。";
//同步配置
values[CFG_APP_NO] = commonClassList::cfgData.value(CFG_APP_NO).toStdString();
url = QString("%1?%2").arg(commonClassList::url("syncConfig")).arg(readString(values));
qnam->get(QNetworkRequest(QUrl(url)));
}
编译没有任何问题,运行的时候,每次到了if(waitCondition.wait(&mutex,60000))这一句就出错了,直接提示应用程序出错,什么内存错误之类的。
这是什么原因引起的?因为我刚接触QT一月不足,所以解决起来异常费力,浪费不少时间了,希望有经验的前辈能够帮忙解答一下。