2012-11-14 37 views
1

我在写一个利用QThreads的多线程应用程序。我知道,为了启动一个线程,我需要重写run()方法,并在某处使用thread.start()(在我的GUI线程中)调用该方法。当QThread()停止运行(Python)时,是否需要手动调用.quit()方法?

我想知道,但是,是否需要在任何地方拨打.wait()方法,我也应该在线程完成后调用.quit(),或者这是自动完成的?

我正在使用PySide。

感谢

回答

1

两个答案取决于你的代码做什么,你从线程的期望。

如果您的使用线程的逻辑需要等待QThread结束的同时,那么您需要拨打wait()。然而,这种要求是一个马虎的线程模型的标志,除了像应用程序启动和关闭这样的特殊情况。 QThread::wait()的使用暗示蠕变顺序操作,这意味着您实际上不会同时使用线程。

quit()退出QThread内部事件循环,这不是强制使用。长时间运行的线程(与单任务工作者相反)必须具有某种事件循环 - 这是一种通用语句,并非QThread特有的。你要么自己做(以一些while(keepRunning) { }周期的形式),要么使用Qt提供的事件循环,在你的run()方法中调用exec()来触发。前者的实现由您完成,因为您确实提供了keepRunning条件。 Qt提供的实现对你来说是隐藏的,在这里进行quit()调用 - 内部除了在Qt内部设置某种类似的标志之外无非是。

相关问题