当我们没有在Qt 4.8x中继承QThread时,如何使用QEventLoop?

时间:2013-08-26 06:33:28

标签: qt qthread qeventloop

我读过有两种方法可以使用QThread。 如果我有一个继承QObject的Worker类(如在http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/中),那么我应该如何创建和管理本地QEventLoop来处理信号/槽?我不想让内存泄漏。 如何在http://codethis.wordpress.com/2011/04/04/using-qthread-without-subclassing/中描述的worker中创建QNetworkAccessManager?

1 个答案:

答案 0 :(得分:3)

如果你没有QThread的子类,它有自己的事件循环(Fixed QThread documentation of Qt 5, also appliccable for Qt 4)

  

默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。

使用信号和放大器可以轻松完成工作人员的工作管理。插槽:

  

(...)您可以自由地将Worker的插槽连接到任何线程中任何对象的任何信号。由于称为排队连接的机制,可以安全地连接不同线程上的信号和插槽。

这意味着您通常不需要自己关心任何事件循环(除非您需要特殊行为)。只需将线程的started信号连接到工作对象的任何插槽,并确保设置某种删除链:工作者发出的信号导致线程被停止和删除,或者反过来 - 两种方式都有效,取决于你的情况。