在QThread中调用QThread.exec()方法是必要的吗?

yan*_*nce 6 qt multithreading qthread

我没有exec()在我的代码中调用,但是timer并且QUdpSocket工作正常.被exec()用于等待的event继续吗?

更新:timer工作正常,因为我没有打电话moveToThread(this)QThread,这意味着它QThread实际上仍然是其中的一部分main thread.至于QUdpSocket我使用投票functions.所以它不需要合作signals.

提示:如果你需要做init一些东西,那需要event loop你的QThread,你可以delay打电话,moveToThread直到你不再需要它signals,这在程序加载时是实用的.您也不需要在构造函数中调用它run()(例如,您可以在内部调用它),只需将this QThread指针复制到变量并call使用指针在其他地方/其他地方生成.

dra*_*hnr 3

为了实际使用您的线程,而不是 QApplication 执行循环,您必须moveToThread(this)在线程构造函数中调用并在run()QThread 派生类的受保护方法中放置一个执行循环。

单独的线程执行循环可防止 QApplication 循环因非 ui 相关信号和槽而变得混乱,从而延迟 .eg 按钮单击的槽执行,使您的应用程序“滞后”。

注意:通常你总是子类化 QThread,请参阅Qt 文档以获取更多信息

编辑:Qt 文档是错误的,请阅读此线程https://blog.qt.io/blog/2010/06/17/youre-doing-it-wrong/