Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';创建辅助对象QoObject时,QThread对象是否具有完成信号?_Python_Multithreading_Pyqt_Signals_Qthread - Fatal编程技术网

Python 为什么';创建辅助对象QoObject时,QThread对象是否具有完成信号?

Python 为什么';创建辅助对象QoObject时,QThread对象是否具有完成信号?,python,multithreading,pyqt,signals,qthread,Python,Multithreading,Pyqt,Signals,Qthread,我知道有两种使用QThread的多线程方法,一种是子类化QThread并重写run()方法,另一种是创建QObject类并将其实例移动到QThread。据说后者是一种更好的做法 我发现子类化QThread确实提供了一个可以使用的finished方法,但是当创建一个单独的QObject作为工作线程时,QThread将不再发出finished信号。QThrean run方法似乎创建了一个事件循环,当重新实现时,该循环返回函数并发出一个finished信号。但是对于worker类,我们需要在QThre

我知道有两种使用QThread的多线程方法,一种是子类化QThread并重写run()方法,另一种是创建QObject类并将其实例移动到QThread。据说后者是一种更好的做法

我发现子类化QThread确实提供了一个可以使用的
finished
方法,但是当创建一个单独的QObject作为工作线程时,QThread将不再发出
finished
信号。QThrean run方法似乎创建了一个事件循环,当重新实现时,该循环返回函数并发出一个
finished
信号。但是对于worker类,我们需要在QThread对象上调用
quit()
方法


这是正确的吗?它不会使子类化QThread的使用更灵活吗?

当覆盖run方法时,逻辑将在那里实现,以便您可以知道它何时结束,但是在将QObject移动到QThread的情况下,无法确定QObject逻辑何时完成执行


另一种方法是创建一个完成的信号,当您考虑QObjtLogic结束时,

>因此,<代码>运行方法最初有一个Exchange方法,它创建一个事件循环,因此永远不会真正“结束”,除非调用<代码> CUTE()(/Cord>)方法。您建议创建自定义完成信号。调用
quit()
如何?它完成事件循环并发出
finished
信号?@Sherafati忘记模拟初始逻辑,一个解决方案是将完成的信号连接到调用QThread的quit方法的插槽。你的意思是我应该创建一个自定义完成信号,并在任何时候发出它,然后将其连接到
QThread.quit()
?是否基本上需要手动终止QThread(通过调用quit)?如果它的事件循环从未停止呢?