大家好开始:
使用QT版本5.4.1
使用Gdal / Ogr
C ++中的编码
所以我做了很重的功能,它从WFS下载,解析和输出一些数据。我现在正在线程化这个函数,因此它会停止锁定GUI线程。
所以这就是我正在做的QtConcurrent :: run(这个& myClass :: heavyfunction);我的问题是,这个线程函数可以访问成员变量吗?在它运行之前已经设置好了?或者我必须将该成员变量作为参数传递给函数。
答案 0 :(得分:1)
取消QTConcurrent::run的文档:
QtConcurrent :: run()也接受指向成员函数的指针。该 第一个参数必须是const引用或指向的引用 班级的实例。传递const引用非常有用 调用const成员函数;通过指针传递是有用的 调用修改实例的非const成员函数。
您似乎应该能够访问该类的成员。所以简短的回答是肯定的,只要确保你不像const那样传递。
然而,除了从线程池中抓取一个线程之外,我建议你对资源进行一些锁定,否则你可能会发现自己有点腌制。
我建议您使用其中一个线程同步对象。 QMutex,QReadWriteLock,QSemaphore和QWaitCondition
这里是我建议你开始的地方(QreadWriteLock / Qmutex可能是你最简单的使用,但是阅读并自己决定)。
(仍在编辑长答案,很快会在更新中发布)。