在将源代码从Qt 5.6移植到Qt 5.9.1时,在使用CppUnit 1.13.2进行测试时出现了问题:::FreeLibrary
在完成所有单元测试后成功挂起。调试进程时,堆栈显示
的CppUnit :: DynamicLibraryManager :: doReleaseLibrary()
在调用QThread::wait()
时遇到问题,并且堆栈的进一步挂起WaitForSingleObject
,即request.environ('werkzeug.server.shutdown')
永远等待。
有人知道会导致这种行为的原因吗?
答案 0 :(得分:0)
我找到了这个问题的原因:c.f。 QTBUG-34460。 我不知道为什么在从Qt版本5.6迁移到5.9.1之前没有发现问题,因为已经报告了版本5.1.1的错误。所以调查需要一些时间。
对于受影响的测试 - 所有这些测试都涉及某种多线程,例如:通过在某处调用QtConcurrent::run()
- 我在每个受影响的测试结束时插入以下行作为我的解决方案:
void UnitTestClass::testWithMultithreadingInside
{
...
constexpr auto MAX_WAIT_MS = 5000;
auto pool = QThreadPool::globalInstance();
if (pool)
{
pool->clear();
pool->waitForDone(MAX_WAIT_MS);
}
}