我正在学习Qt中的多线程,但我遇到了一个问题QThreadPool
。在
我有一个MainController
类,它包含一个QThreadPool
。
此类还有一个特定的方法processDirectory
来初始化线程进程:
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)
然后我在一个widget中有一个signal/slot连接,它捕获一个新目录来启动processDirectory
方法。在
我有竞争条件,因为有时代码可以工作,有时却不行
所以我的问题是: 是否允许从给定类的方法向线程池发送新的工作线程? 在这种情况下,您将如何处理新worker的创建和发送到线程池的操作?在
在我的例子中,当方法processDirectory
时,dirrunable
对象会发生什么情况?
池是否将对象保留在其上下文中?在
由于我有问题,我现在的想法是创建另一个线程,该线程将包含池,并通过队列接收目录路径,从而在该线程中创建工作线程。 但这看起来太疯狂了,我觉得我错过了一些重要的东西!在
谢谢你的帮助!在
顺便说一句:不管我在网上读到什么,我都无法理解的错误:
^{pr2}$
如果有人有一天到达这个岗位。问题是在Qt中不允许将模型放入线程中。所以我在主线程中使用信号更新模型来解决这个问题。在
相关问题 更多 >
编程相关推荐