不使用QThread的情况下 程序运行很正常
当把涉及到QNetworkAccessManager 的处理的代码放到run下面的时候
发现根本就没有网络通讯
比如:
extern int abc;
void myThread::run() {
QNetworkAccessManager *manager = new QNetworkAccessManager;
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(_slotManagerFinished(QNetworkReply *)));
QUrl getUrl = QUrl("http://whatever/path");
QNetworkRequest req;
req.setUrl(getUrl);
req.setRawHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)");
QNetworkCookieJar * jar = new QNetworkCookieJar;
manager->setCookieJar(jar);
manager->get(req);
}
void myThread::_slotManagerFinished(QNetworkReply * reply){
abc++;
}
上面的代码中 URL替换掉了 是一个绝对可以访问的URL
manager->get(req);
这句运行后,服务端查看并没有收到任何数据包
abc 这个变量是个全局变量 ,那个SLOT也没有运行 值也没有任何改变
猜测原因是不是因为 QNetworkAccessManager 本身就是在Thread中运行的 ?
所以QNetworkAccessManager 不能在自定义的子进程中工作?
QNetworkAccessManager *manager = new QNetworkAccessManager; 这一句如果改成
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
运行的过程中会报错:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is myThread(0x98f6e10), parent's thread is QThread(0x98d08a0), current thread is myThread(0x98f6e10)
有遇到过这样类似的问题的吗?
不过照常理来说 ,QNetworkAccessManager很可能是运行在子进程里,
因为在一个QWidget主进程里面使用 QNetworkAccessManager 即使请求的URL不能访问 , 也不会造成阻塞, 窗口还是很正常,从不会出现无法响应
那如果要并发使用多个QNetworkAccessManager 对象来get 应该怎么写呢?