【发布时间】:2026-02-10 13:10:01
【问题描述】:
我正在 Qt 中开发一个应用程序,我需要将异步 post/get 请求从我的客户端发送到另一台服务器。我的应用程序已经有一个线程,我想用自己的事件循环创建一个不同的线程来发送 post/get 请求。
是否可以使用
- 继承 QThread,
- 在重新实现的子类的 run 方法中启动事件循环,
- 有发送请求的方法吗?
提前致谢。
【问题讨论】:
标签: c++ multithreading qt
我正在 Qt 中开发一个应用程序,我需要将异步 post/get 请求从我的客户端发送到另一台服务器。我的应用程序已经有一个线程,我想用自己的事件循环创建一个不同的线程来发送 post/get 请求。
是否可以使用
提前致谢。
【问题讨论】:
标签: c++ multithreading qt
您不需要做任何事情,因为 QNetworkAccessManger 会异步发出所有请求。 阅读更多http://qt-project.org/doc/qt-4.7/qnetworkaccessmanager.html
【讨论】:
您必须记住,QObject 具有线程亲和性,即它在“哪里”对象被实例化。这意味着如果没有创建事件循环,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 的每个事件或信号都会“跳转”到其线程进行处理。
希望对你有所帮助。
【讨论】:
QThread 了。您还应该在调用QThread::quit() 之后等待线程完成,然后再删除它。