找回密码
 立即注册
收起左侧

后台线程中怎么访问网站

1
回复
4237
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2014-7-31 10:19:36 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
初学Qt,正好要做一个网站的压力测试,想着多开几十个线程同时访问网站,运行时每个线程都出现错误:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNetworkAccessManager(0x13d23660), parent's thread is QThread(0x13cf11f0), current thread is HttpThread(0x13d5b480)

哪位大神能指点一下啊。

后台线程代码如下:
HttpThread::HttpThread(QObject *parent) : QThread(parent){    m_bRun = true;    m_namHttp = new QNetworkAccessManager(this);    m_req = QNetworkRequest(QUrl("http://192.168.199.142"));    connect(m_namHttp, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));}
void HttpThread::stop(){    m_bRun = false;}
void HttpThread::run(){    while (m_bRun) {        m_milliSecond = 0;        m_timeStart = QTime::currentTime();        m_namHttp->get(m_req);        m_bConnect = true;        while (m_bRun && m_bConnect) {            msleep(10);        }        if (m_bRun)            emit finishOnce(m_milliSecond);    }    m_bRun = true;}
void HttpThread::replyFinished(QNetworkReply *reply){    m_timeStop = QTime::currentTime();    m_milliSecond = m_timeStart.msecsTo(m_timeStop);    reply->deleteLater();    m_bConnect = false;}


回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-7-31 10:26:20 显示全部楼层
代码没贴好
  1. HttpThread::HttpThread(QObject *parent) : QThread(parent)
  2. {
  3.     m_bRun = true;
  4.     m_namHttp = new QNetworkAccessManager(this);
  5.     m_req = QNetworkRequest(QUrl("http://192.168.199.142"));
  6.     connect(m_namHttp, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
  7. }

  8. void HttpThread::stop()
  9. {
  10.     m_bRun = false;
  11. }

  12. void HttpThread::run()
  13. {
  14.     while (m_bRun) {
  15.         m_milliSecond = 0;
  16.         m_timeStart = QTime::currentTime();
  17.         m_namHttp->get(m_req);
  18.         m_bConnect = true;
  19.         while (m_bRun && m_bConnect) {
  20.             msleep(10);
  21.         }
  22.         if (m_bRun)
  23.             emit finishOnce(m_milliSecond);
  24.     }
  25.     m_bRun = true;
  26. }

  27. void HttpThread::replyFinished(QNetworkReply *reply)
  28. {
  29.     m_timeStop = QTime::currentTime();
  30.     m_milliSecond = m_timeStart.msecsTo(m_timeStop);
  31.     reply->deleteLater();
  32.     m_bConnect = false;
  33. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了