提问者:小点点

static thread_local QNetworkAccessManager是线程应用程序的好选择吗?


我使用的是用Qt(C++)编写的线程应用程序。

我需要经常从不同的线程发出GET/POST请求。

Qt doc说:

对于整个Qt应用程序来说,一个QNetworkAccessManager实例应该就足够了。 由于QNetworkAccessManager基于QObject,因此只能从它所属的线程使用它。

static thread_local QNetworkAccessManager是否适合我的目的?


共1个答案

匿名用户

不,不是个好选择。

您不应该创建静态或全局的Qobject子类实例,因为您通常需要在创建Qt应用程序对象之后创建它们(许多Qt材料依赖于已经存在的应用程序对象)。 C++并没有真正提供非常好的控制静态对象的实际创建时间,而在这里您希望拥有这种控制。

只需使用指针和new创建QNetworkAccessManager实例,它们的数量随您的需要而定。 您可以直接在正确的线程中创建它们,也可以在其他(通常是主)线程中创建它们并将它们移动到正确的线程中。

当它们没有自然父级时(因为父级必须位于同一个线程中!),要正确地销毁它们,请将它们线程的QThread::Finished信号连接到对象QObject::DeleteLater插槽,当线程完成时,它们将被干净地删除。

相关问题