栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用moveToThread()在pyqt中正确使用QThread?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用moveToThread()在pyqt中正确使用QThread?

QThread中的默认run()实现为您运行一个事件循环,等效于:

class GenericThread(QThread):    def run(self, *args):        self.exec_()

事件循环的重要之处在于,它允许线程 拥有的 对象在其插槽上接收事件,这些事件将 在该线程中
执行。这些对象只是QObject,而不是QThreads。

重要说明:QThread对象 不属于其自己的线程 !它是在主线程上创建的,并在那里存在。除了其run方法之外,所有代码都在主线程中执行。

因此,您应该可以执行以下操作:

class GenericWorker(QObject):    def __init__(self, function, *args, **kwargs):        super(GenericWorker, self).__init__()        self.function = function        self.args = args        self.kwargs = kwargs        self.start.connect(self.run)    start = pyqtSignal(str)    @pyqtSlot    def run(self, some_string_arg):        self.function(*self.args, **self.kwargs)my_thread = QThread()my_thread.start()# This causes my_worker.run() to eventually execute in my_thread:my_worker = GenericWorker(...)my_worker.moveToThread(my_thread)my_worker.start.emit("hello")

另外,请仔细考虑

self.function
当前已丢弃的结果的结果。您可以在上声明另一个信号
GenericWorker
,该信号接收结果,并让
run()
方法在完成后发出该信号,并将结果传递给它。

一旦掌握了这些要点,并意识到您不应该也不应该继承QThread,生活就会变得更加简单明了。简而言之,永远不要在QThread中工作。您几乎应该永远不需要覆盖运行。对于大多数使用情况,设置与QObject到QThread的适当关联并使用QT的信号/插槽为进行多线程编程提供了一种非常强大的方法。请注意不要让推送到工作线程的QObject徘徊…

http://ilearnstuff.blogspot.co.uk/2012/09/qthread-best-practices-when-
qthread.html



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号