我使用的是用Qt(C++)编写的线程应用程序。
我需要经常从不同的线程发出GET/POST请求。
Qt doc说:
对于整个Qt应用程序来说,一个QNetworkAccessManager实例应该就足够了。 由于QNetworkAccessManager基于QObject,因此只能从它所属的线程使用它。
static thread_local QNetworkAccessManager
是否适合我的目的?
不,不是个好选择。
您不应该创建静态或全局的Qobject
子类实例,因为您通常需要在创建Qt应用程序对象之后创建它们(许多Qt材料依赖于已经存在的应用程序对象)。 C++并没有真正提供非常好的控制静态对象的实际创建时间,而在这里您希望拥有这种控制。
只需使用指针和new
创建QNetworkAccessManager
实例,它们的数量随您的需要而定。 您可以直接在正确的线程中创建它们,也可以在其他(通常是主)线程中创建它们并将它们移动到正确的线程中。
当它们没有自然父级时(因为父级必须位于同一个线程中!),要正确地销毁它们,请将它们线程的QThread::Finished
信号连接到对象QObject::DeleteLater
插槽,当线程完成时,它们将被干净地删除。