• 6720阅读
  • 3回复

一个绝对值得讨论的问题! [复制链接]

上一主题 下一主题
离线83888788
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-02


是关于QNetworkAccessManager不立即返回,导致我考虑是否需要子类化QThread来实现多线程下载问题
部分源代码如下:

  1. void MainWindow::startRequest(QUrl url)
  2. {
  3.     QNetworkRequest request1(url);
  4.     request1.setRawHeader("RANGE","bytes=0-512000");
  5.     reply1=qnam.get(request1);
  6.     QNetworkRequest request2(url);
  7.     request2.setRawHeader("RANGE","bytes=512000-1024000");
  8.     reply2=qnam.get(request2);
  9.     qDebug()<<reply<<reply2<<"\n";
  10.     connect(reply,SIGNAL(readyRead()),this,SLOT(slotReadyRead()));
  11.     connect(reply2,SIGNAL(readyRead()),this,SLOT(slotReadyRead()));
  12. }
  13. void MainWindow::slotReadyRead()
  14. {
  15.     QNetworkReply *r=qobject_cast<QNetworkReply *>(sender());
  16.     qDebug()<<r<<"works";
  17. }




程序运行起来,控制台部分输出如下:


QNetworkReplyImpl(0xaa22128) QNetworkReplyImpl(0xaa21d28)



QNetworkReplyImpl(0xaa21d28) works
QNetworkReplyImpl(0xaa22128) works
QNetworkReplyImpl(0xaa21d28) works
QNetworkReplyImpl(0xaa22128) works
QNetworkReplyImpl(0xaa21d28) works
QNetworkReplyImpl(0xaa21d28) works
QNetworkReplyImpl(0xaa22128) works
QNetworkReplyImpl(0xaa22128) works
QNetworkReplyImpl(0xaa21d28) works
......
......



可以发现,两个QNetworkReply(reply1和reply2)是交替工作的,由此猜想多线程下载并不需要子类化QThread,不知道这个想法对不对,希望大家帮忙研究一下,万分感激!!

离线XChinux

只看该作者 1楼 发表于: 2011-03-02
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线83888788
只看该作者 2楼 发表于: 2011-03-03
先谢谢斑竹,再看!
不懂的就得请教斑竹了
离线83888788
只看该作者 3楼 发表于: 2011-03-04
回 1楼(XChinux) 的帖子
那么到底有没有子类化QThread的必要啊?
那篇文章看了,有的能理解,有的比较深刻。
QNetworkReply的get是非阻塞的,难道说就真的不用子类化QThread了吗?
谢谢!
快速回复
限100 字节
 
上一个 下一个