2

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

4

1 回答 1

3

如果您没有子类化QThread,它有自己的事件循环(Qt 5 的固定 QThread 文档,也适用于 Qt 4)

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

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

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

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

于 2013-08-26T07:14:28.157 回答