可以作为线程访问成员变量的函数吗?

时间:2015-05-28 10:30:28

标签: c++ multithreading qt

大家好开始:

使用QT版本5.4.1

使用Gdal / Ogr

C ++中的编码

所以我做了很重的功能,它从WFS下载,解析和输出一些数据。我现在正在线程化这个函数,因此它会停止锁定GUI线程。

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

1 个答案:

答案 0 :(得分:1)

取消QTConcurrent::run的文档:

  

QtConcurrent :: run()也接受指向成员函数的指针。该   第一个参数必须是const引用或指向的引用   班级的实例。传递const引用非常有用   调用const成员函数;通过指针传递是有用的   调用修改实例的非const成员函数。

您似乎应该能够访问该类的成员。所以简短的回答是肯定的,只要确保你不像const那样传递。

然而,除了从线程池中抓取一个线程之外,我建议你对资源进行一些锁定,否则你可能会发现自己有点腌制。

我建议您使用其中一个线程同步对象。 QMutex,QReadWriteLock,QSemaphore和QWaitCondition

这里是我建议你开始的地方(QreadWriteLock / Qmutex可能是你最简单的使用,但是阅读并自己决定)。

  1. Thread Synchronization
  2. Threads and qObject
  3. (仍在编辑长答案,很快会在更新中发布)。