C++ 在Qt中的不同线程上发送get/post请求
我正在用Qt开发一个应用程序,需要从我的客户机向另一台服务器发送异步post/get请求。我的应用程序已经有一个线程,我想用它自己的事件循环创建一个不同的线程来发送post/get请求 有可能这样做吗C++ 在Qt中的不同线程上发送get/post请求,c++,multithreading,qt,C++,Multithreading,Qt,我正在用Qt开发一个应用程序,需要从我的客户机向另一台服务器发送异步post/get请求。我的应用程序已经有一个线程,我想用它自己的事件循环创建一个不同的线程来发送post/get请求 有可能这样做吗 子类化QThread 在子类的重新实现的run方法中启动事件循环 有发送请求的方法吗 提前谢谢 您不需要做任何事情,因为QNetworkAccessManger异步发出所有请求。 阅读更多内容您必须记住,QObject具有线程关联,它是在实例化“where”对象时获得的。这意味着,如果没有创建事件
提前谢谢 您不需要做任何事情,因为QNetworkAccessManger异步发出所有请求。
阅读更多内容您必须记住,QObject具有线程关联,它是在实例化“where”对象时获得的。这意味着,如果没有创建事件循环,Qt不知道从对象线程以外的另一个线程接收事件(和信号)。更多信息,请看这个 一个好方法是创建一个实现逻辑的类,并将其实例化为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的每个事件或信号都将“跳转”到要处理的线程
我希望这会对您有所帮助。谢谢您的回答。我只需要有一个事件循环来使用QNetworkAccessManager。我想用这个事件循环创建另一个线程。我可以创建一个类来处理网络,并使用新的事件循环将该对象移动到该线程吗?很可能您的主线程中已经有一个事件循环。我确实有一个事件循环,但它不是基于qt的。这就是为什么要创建另一个具有新事件循环的线程。QNetworkAccessManager不需要另一个线程。它将在你的主线程工作良好。如果愿意的话,您只需要调用post/get方法和slot来接收回复。整个工作将在另一个线程中完成,主线程将只接收结果。那么,为什么要使用qt?我如何创建和删除ThreadClass?我可以让它永远与应用程序的主线程一起运行吗?@user3065039 ThreadClass与其他任何类一样。它确实是当前操作系统中线程的包装器。我已经添加了如何使用它。你也可以使用。这样您就根本不必为
QThread
创建子类。您还应该在调用QThread::quit()
后等待线程完成,然后再删除它。我想在我的应用程序中有两个永久线程。一个是做事情的线程,另一个是负责网络请求的永久线程。这个应用程序是一个守护进程,所以我需要一个网络线程来一直工作。Jairo想问你。我在模板中或多或少地实现了类似的功能。我有一个WorkerClass,它里面有QnetworkAccessManager,在构造函数中我以这种方式连接(&manager,SIGNAL(finished(QNetworkReply*)),slotFinished(QNetworkReply*));我的问题是以后如何在QNetworkReply中收集回复