gpt4 book ai didi

c++ - 线程函数可以访问成员变量吗?

转载 作者:行者123 更新时间:2023-11-28 06:15:00 34 4
gpt4 key购买 nike

大家好,开始:

使用 QT 版本 5.4.1

使用 Gdal/Ogr

用 C++ 编写代码

所以我正在做一个相当繁重的函数,它从 WFS 下载、解析和输出一些数据。我现在正在对这个函数进行线程处理,因此它不再锁定 GUI 线程。

这就是我正在做的事情 QtConcurrent::run(this,&myClass::heavyfunction);我的问题是,这个线程函数可以访问成员变量吗?在它运行之前已经设置?或者我必须将该成员变量作为参数传递给函数。

最佳答案

关闭 QTConcurrent::run 的文档:

QtConcurrent::run() also accepts pointers to member functions. The first argument must be either a const reference or a pointer to an instance of the class. Passing by const reference is useful when calling const member functions; passing by pointer is useful for calling non-const member functions that modify the instance.

看来你应该可以访问类的成员了。所以简短的回答是肯定的,只要确保你没有作为 const 传递。

但是,除了从线程池中获取线程外,我建议您对资源进行一些锁定,否则您可能会发现自己陷入困境。

我建议您使用线程同步对象之一。 QMutex、QReadWriteLock、QSemaphore 和 QWaitCondition

我建议您从这里开始(QreadWriteLock/Qmutex 可能是您使用起来最简单的,但请仔细阅读并做出自己的决定)。

  1. Thread Synchronization
  2. Threads and qObject

(仍在编辑长答案,将很快发布更新)。

关于c++ - 线程函数可以访问成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503974/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com