记录时间
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,有这个数字就是定位到问题出现的线程,至少把范围限定了。
解决措施
分析代码。。