来自线程池的 QNetworkAccessManager

发布于 2024-11-05 20:50:22 字数 358 浏览 4 评论 0原文

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

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

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.
        ...
    }
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

篱下浅笙歌 2024-11-12 20:50:22

来自Qt 文档

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

由于您每次都使用不同的实例(您在 run() 中在堆栈上创建的实例),因此您是安全的。

From the Qt documentation:

[...] a class is said to be reentrant if its member functions can [simultaneously] be
called safely from multiple threads, as long as each thread uses a different instance of
the class.

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

执笔绘流年 2024-11-12 20:50:22

作为旁注,如果您只想异步获取 GET 请求,QNetworkAccessManager 已经是异步的(文档中是这样说的)。

As a side note to this ,if you just want the GET request to be asynchronous, QNetworkAccessManager is already asynchronous (says so in the docs).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文