1

我正在编写一个使用 QThreads 的多线程应用程序。我知道,为了启动一个线程,我需要重写该run()方法并使用thread.start()某处调用该方法(在我的 GUI 线程中)。

但是,我想知道是否需要在.wait()任何地方调用该方法,并且我应该.quit()在线程完成后调用该方法,还是自动完成?

我正在使用 PySide。

谢谢

4

1 回答 1

1

这两个答案都取决于您的代码在做什么以及您对线程的期望。

如果您使用线程的逻辑需要在 QThread 完成时同步等待,那么是的,您需要调用wait(). 然而,这样的要求是马虎线程模型的标志,除了应用程序启动和关闭等非常特殊的情况。的用法QThread::wait()建议爬行顺序操作,这意味着您实际上没有同时使用线程。

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

于 2012-11-14T15:18:10.743 回答