QNetworkAccessManager可以从不同的线程获取/发布?

时间:2016-02-28 15:04:10

标签: qt qnetworkaccessmanager

我有一个QNetworkAccessManager对象(正如Qt docs推荐的那样)。但是,我需要从另一个线程获取请求,即不是线程创建了QNetworkAccessManager对象。

这个问题有两个方面:

  1. 由于功能(getpost ...)未标记为threadsafe,我认为在调用之前我需要使用锁。
  2. 但即使我确保没有2个线程并行调用,也可能出现问题:因此可能会发生QObject父子关系设置,但是来自不同线程中的对象。为此,我需要知道QNetworkAccessManager
  3. 的内部

    那么允许从另一个线程调用get / post吗?

1 个答案:

答案 0 :(得分:5)

  

QNetworkAccessManager是否接收/发布来自不同线程的调用   可能的?

我不久前在这里讨论过QNetworkAccessManager from ThreadPool

因为QNetworkAccessManager Class引用说:

  

此课程中的所有功能都是可重入的。

再次出现在Reentrancy and Thread-Safety中解释:

  

......如果一个类的成员函数可以是一个类,则说它是可重入的   从多个线程安全地调用,只要每个线程使用一个   不同的类实例。如果它的类是线程安全的   即使有多个线程,也可以安全地调用成员函数   所有线程都使用该类的相同实例。

因此,这个原始问题的答案是:对于来自不同线程的多个调用,QNetworkAccessManager是安全的,每个线程需要一个类实例。