QT多线程 QWaitCondition QEVENTLOOP

jinghe20 2013-08-17 03:47:21
因为需要一个下载应用的功能,为了避免下载的过程中影响界面的使用,所以单独开了一个线程去处理这个事情。
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一月不足,所以解决起来异常费力,浪费不少时间了,希望有经验的前辈能够帮忙解答一下。
...全文
449 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinghe20 2013-08-17
  • 打赏
  • 举报
回复
报错: RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
jinghe20 2013-08-17
  • 打赏
  • 举报
回复
可能不是waitCondition.wait(&mutex,60000)引起的,请问一下在线程中定义connect(qnam,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));会有什么问题么?

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧