Qt QWaitCondition问题排查

记录时间

20250717

开发环境

Qt C++(msvc调试) Qt 5.14.1(MSVC 2017,32 bit)

问题描述

程序在退出时候,输出窗口出现如下输出

cpp 复制代码
QWaitCondition: Destroyed while threads are still waiting

以上问题会导致在23H2等一些系统上无法完全退出。

问题分析

1.先中断运行的程序,找到线程窗口,截图保留证据,主要要记录线程ID和线程名字

2.断点,在qwaitcondition_win.cpp找到输出上面文字的代码位置,打上断点。

3.定位线程

关闭程序,程序光标停留在上面断点处,在此时分析程序的调用堆栈。

预先使用EveryThing软件找到QThreadpool.cpp,并使用vs打开QThreadpool.cpp,定位到297行,该行代码如下

cpp 复制代码
delete thread;

调用堆栈定位到该语句,双击调用堆栈,一个个的双击

将thread变量拉到监视窗口

打开成员thread->manager->QObjectPrivate->threadData->threadId

在threadId下面的节点中,_q_value=0x0000000000005c20 该值为线程ID,有这个数字就是定位到问题出现的线程,至少把范围限定了。

解决措施

分析代码。。