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