QThread结束状态

QThread finished state

QThread * thread = new QThread();
qDebug() << "Finished: " << thread->isFinished();

控制台是:

Finished: 0

线程 从未 启动,不应 isFinished() returns true (1) 而不是 (0) ?

注意:isRunning returns 0 是正确的。

来自the documentation

bool QThread::isFinished() const

Returns true if the thread is finished; otherwise returns false.

See also isRunning().

bool QThread::isRunning() const

Returns true if the thread is running; otherwise returns false.

See also isFinished().

要完成的线程必须事先启动。

没有。 finished 状态表明在调用 quit()exit() 之前。它是接收 finished() 信号的替代方法。

quit()exit() 导致 run()(这是线程中实际在单独线程中运行的唯一部分)返回到您的 QThread 实例属于。之后执行清理程序 - 无法再处理指定删除事件旁边的事件。

已触发完成状态,您可以安全地删除 QThread 的实例。 finished() 信号被发出(在大多数情况下连接到驻留在单独线程中的对象的 deleteLater() 插槽)和 isFinished() returns true.

当然,如果您还没有启动线程,它就无法完成,因为它永远不会 运行。 :D 开个玩笑,删除一个根本没有启动的 QThread 实例是完全安全的。

如果您对此更感兴趣,我建议您查看 QThread 的源代码,了解 class 的结构及其实现方式。