CppUnit 测试与 Qt 5.9 一起挂起
CppUnit test hangs with Qt 5.9
将我们的源代码从Qt 5.6移植到Qt 5.9.1时,使用CppUnit 1.13.2进行测试时出现了一个问题:在完成时成功执行所有单元测试时DllPluginTester.exe
挂起。调试到进程中时,堆栈显示
CppUnit::D ynamicLibraryManager::d oReleaseLibrary((
卡住调用::FreeLibrary
,再往上看堆栈挂起QThread::wait()
,即WaitForSingleObject
永远等待。
有没有人知道什么会导致这种行为?
我找到了该问题的原因: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);
}
}
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何防止C++遗留代码中的挂起指针
- 为什么所有C++编译器都会崩溃或挂起此代码
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 构建挂起,即使是适度的文件大小
- 循环挂起迭代的 std::擦除 on std::list
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 从不同进程中的另一个线程挂起/恢复线程或进程
- Boost (Beast) websocket:同步写入挂起
- 为什么析构函数挂起
- 使用互斥会挂起程序
- 在C++和 Python 程序中使用命名管道的 IPC 挂起
- 设置变量时C++程序挂起
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 有时ShowWindow从不调用OnShowWindow,主应用程序挂起
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- WTSFreeMemory在启动期间从服务调用时挂起-我应该省略吗
- CppUnit 测试与 Qt 5.9 一起挂起