我正在学习Qt中的多线程,我遇到QThreadPool
的问题。
我有一个包含MainController
的{{1}}类。
该类还有一个特定的方法QThreadPool
来初始化线程进程:
processDirectory
然后我在widget中有一个信号/插槽连接,抓住一个新目录来启动class MainController():
def __init__(self, model, view):
[...]
self.pool = QtCore.QThreadPool()
self.pool.setMaxThreadCount(2)
def processDirectory(self, dirpath):
[...]
# Create a directory worker
dirrunnable = DirRunnable(dirpath, extSelected, self.model.dirMgrModel)
# Send worker to thread pool
self.pool.start(dirrunnable)
方法。
我有竞争条件,因为有时代码会起作用,有时则不会。
所以我的问题是: 是否允许从给定类的方法向线程池发送新worker? 在这种情况下,您将如何处理新工作线程的创建和发送到线程池?
就我而言,方法processDirectory
时我的dirrunable
对象会发生什么?
池会将对象保留在其上下文中吗?
由于我遇到问题,我的想法是创建另一个包含池的线程,并通过队列接收目录路径以在该线程中创建worker。 但看起来很疯狂,我觉得我在这里错过了很多东西!
感谢您的帮助!
顺便说一下:无论我在互联网上看到什么,我得到的错误都无法理解:processDirectory
答案 0 :(得分:2)
如果某人有一天到达这个帖子。问题是你不允许在Qt中将模型放入线程中。所以我使用信号在主线程中更新模型解决了这个问题。