首页| 论坛| 消息
主题:qt5 多线程下载 QNetworkReply readAll后程序崩溃 [
回帖:此问题已经解决
原因是reply跟manager这两个对象是在run函数中new出来的,按照Qt官方的说法,继承于QThread的类只是线程的管理者而不是子线程本身,所以reply对象属于子线程,而reply->readAll函数则是在主线程中执行的(可以使用currentThreadId打印出run函数所处的线程ID还有reply->readAll函数所处的线程,不管在哪个子线程对象中,reply->readAll函数打印的ID都会与主线程相同),问题正在于此,
根据http://www.qtcentre.org/threads/27112-I-think-there-is-a-problem-with-QNetworkReply-and-threads这篇帖子中六楼的Rembobo所说,子线程中的某些指针(reply)在子线程中已经成为无效指针的时候,在主线程中可能还被当作有效的指针,当去使用一个无效指针的时候,结果可想而知。。。
当然相反的情况也会发生,下面我会给出修改好的代码,希望对大家有帮助
(注:代码是同学从某个论坛下载回来测试的,用的是qt4.7,当然接受网络数据用的就不是QNetworkReply这几个类,我们是做了修改以符合最新的qt5.2,如果原作者正在阅读这篇帖子,请联系我)
描述:修改完成的代码
附件: downloadtest.tar.gz (41 K) 下载次数:302
下一楼›:为什么我运行多线程的例子的时候,总是出现“multiple definition of ''main” "?
‹上一楼:chenjun0211:QByteArray tempArry = reply->readAll();改写成QByteArray tempArry = reply->read ..

查看全部回帖(9)
«返回主帖