在Qt中的另一个线程上发送get / post请求

时间:2013-12-04 09:02:13

标签: c++ multithreading qt

我正在Qt中开发一个应用程序,我需要从客户端向另一台服务器发送异步post / get请求。我的应用程序已经有一个线程,我想用自己的事件循环创建一个不同的线程来发送post / get请求。

是否可以使用

执行此操作
  1. 继承QThread,
  2. 在子类的重新实现的run方法中启动事件循环,
  3. 有发送请求的方法吗?
  4. 提前致谢。

2 个答案:

答案 0 :(得分:0)

由于QNetworkAccessManger异步发出所有请求,因此您无需执行任何操作。 阅读更多http://qt-project.org/doc/qt-4.7/qnetworkaccessmanager.html

答案 1 :(得分:0)

您必须记住, QObject 具有线程亲和力,即获取“where”对象的实例化。这意味着如果没有创建事件循环,Qt不知道从另一个线程接收事件(和信号)而不是对象的线程。请查看此link以获取更多信息。

一种好方法是创建一个实现逻辑的类,并将其实例化为 QThread 的特定子类的run方法。让我用代码解释一下:

class WorkerClass : public QObject
{
   // Your logic
  public slots:
     void doWork();
};

class ThreadClass : public QThread
{
   WorkerClass*  m_worker;
   WorkerClass*  getWorker();
   ...
   void run()
   {
      // A new thread is created
      WorkerClass instance; // Get thread affinity
      m_worker = &instance;
      exec(); // Start event loop
      m_worker = 0;
   }
   ....
};

int main(int argc, char* argv[])
{
   QCoreApplication app(arc, argv);
   ThreadClass pThread = new ThreadClass();
   pThread->start();
   pThread->getWorker()->doWork(); // do work into worker's thread

   // Other tasks

   pThread->quit();
   delete pThread;

   app.quit();
}

发送到WorkerClass的每个事件或信号都会“跳转”到要处理的线程。

我希望这会对你有所帮助。