本文介绍了来自 ThreadPool 的 QNetworkAccessManager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个非常基本的问题.该文档提到 QNetworkAccessManager 中的所有方法都是可重入的.如果是这样,在没有锁的 QRunnable 中执行 get() 方法是否合法?我的代码看起来像这样:

A very fundamental question. The documentation mentions that all methods in QNetworkAccessManager are reentrant. If so, is performing a get() method in a QRunnable without locks legal? My code would look something like this:

class MyClass: public QRunnable
{
    void run()
    {
        ...
        QNetworkAccessManager nam;
        QNetworkReply* reply =  name.get(request)    // No Read-write lock.
        ...
    }
};

推荐答案

来自 Qt 文档:

[...] 如果一个类的成员函数可以[同时]成为可重入从多个线程安全地调用,只要每个线程使用不同的实例班级.

由于您每次都使用不同的实例(您在 run() 中在堆栈中创建的实例),因此您处于安全状态.

Since you're using a different instance each time (the one you create on the stack in run()), you're on the safe side.

这篇关于来自 ThreadPool 的 QNetworkAccessManager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-16 18:34