在将源代码从Qt5.6移植到QT5.9.1时,在使用CppUnit 1.13.2进行测试时出现了一个问题:DllPluginTester.exe在完成时成功地执行了所有单元测试。当调试到进程中时,堆栈显示
CppUnit::DynamicLibraryManager::doReleaseLibrary()
继续调用::FreeLibrary,堆栈挂在QThread::wait()中,也就是说,WaitForSingleObject将永远等待。
有没有人知道什么会导致这样的行为?
发布于 2017-07-31 08:30:31
我发现了这个问题的原因: c.f。QTBUG-34460。我不知道为什么在从Qt版本5.6到5.9.1之前没有发现这个问题,因为5.1.1版本已经报告了这个bug。所以调查花了些时间。
对于受影响的测试(所有这些测试都涉及某种多线程处理,例如调用某个位置的QtConcurrent::run() ),我在每个受影响测试的末尾插入了以下行作为我的解决方案:
void UnitTestClass::testWithMultithreadingInside
{
...
constexpr auto MAX_WAIT_MS = 5000;
auto pool = QThreadPool::globalInstance();
if (pool)
{
pool->clear();
pool->waitForDone(MAX_WAIT_MS);
}
}https://stackoverflow.com/questions/45171516
复制相似问题