0

我有一个从自定义 USB 设备获取数据的 Windows 64 C++ 应用程序。它是使用 Qt 4.8 构建的。

它工作正常,没有重复我可以看到的内存泄漏。然而,我确实注意到了,有点警觉,线程数不断增长。在调试中使用进程资源管理器我可以看到对 MSVCR90D.dllbeginthreadex 的多次调用。但是,我找不到应用程序中发生这种情况的位置。对于发布版本也是如此。我原以为每个新线程都会占用默认堆栈大小并显示为每个增加的私有字节,但没有证据表明这一点。

我已经广泛检查了驱动程序,这似乎不是原因。端点仅通过 _beginthread 调用创建一次,而不是在连接后创建。

有没有办法找出导致这种情况的原因?

4

1 回答 1

0

令我恼火的是,答案正盯着我看。在进程资源管理器中,我没有意识到您可以查看线程条目的调用堆栈。我可以看到来自 qt_plugin_query_verification_data 的调用。然后我发现一个 Phonon 资源每次都不断地用一个新线程回调,因为它从来没有得到回答,所以线程一直存在。我将其归结为一个非常愚蠢、看似简单的向用户播放音频提示的问题。

重新排列声子播放代码解决了这个问题。不过感谢您的建议。我今天学到了很多。

添加:

得到教训:

  • Process explorer 在很多方面都是一个很棒的工具。花一些时间学习它的力量是值得的。
  • 仔细阅读供应商示例代码并充分理解。编写api调用的小例子并仔细测试。
  • 堆栈大小没有相应增加的失控线程创建表明轻量级信号问题。
于 2013-05-22T13:59:49.287 回答