我正在编写一个使用 QThreads 的多线程应用程序。我知道,为了启动一个线程,我需要重写该run()
方法并使用thread.start()
某处调用该方法(在我的 GUI 线程中)。
但是,我想知道是否需要在.wait()
任何地方调用该方法,并且我应该.quit()
在线程完成后调用该方法,还是自动完成?
我正在使用 PySide。
谢谢
我正在编写一个使用 QThreads 的多线程应用程序。我知道,为了启动一个线程,我需要重写该run()
方法并使用thread.start()
某处调用该方法(在我的 GUI 线程中)。
但是,我想知道是否需要在.wait()
任何地方调用该方法,并且我应该.quit()
在线程完成后调用该方法,还是自动完成?
我正在使用 PySide。
谢谢
这两个答案都取决于您的代码在做什么以及您对线程的期望。
如果您使用线程的逻辑需要在 QThread 完成时同步等待,那么是的,您需要调用wait()
. 然而,这样的要求是马虎线程模型的标志,除了应用程序启动和关闭等非常特殊的情况。的用法QThread::wait()
建议爬行顺序操作,这意味着您实际上没有同时使用线程。
quit()
退出 QThread 内部的事件循环,这不是强制使用的。一个长时间运行的线程(与单任务工作者相反)必须有某种事件循环——这是一个通用语句,不特定于 QThread。你要么自己做(以某种循环的形式),要么使用 Qt 提供的事件循环,你可以通过调用你的方法while(keepRunning) { }
来触发它。前一个实现可以由您完成,因为您确实提供了条件。Qt 提供的实现对你是隐藏的,这里调用——它在内部只是在 Qt 中设置某种类似的标志。exec()
run()
keepRunning
quit()