Windows 64位应用程序,不断增加的线程数

时间:2013-05-22 08:53:38

标签: windows multithreading visual-c++ usb

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

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

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

有没有找到导致这种情况的原因?

1 个答案:

答案 0 :(得分:0)

令我烦恼的是,答案是盯着我看。在进程资源管理器中,我没有意识到你可以查看调用堆栈的线程条目。我可以看到调用来自qt_plugin_query_verification_data。然后我发现一个Phonon资源每次都在不断回调一个新的线程,因为它从未得到回答,所以线程停留了。我将其追踪到一个非常愚蠢的,看似简单的向用户播放音频线索的问题。

重新排列声子播放代码摆脱了问题。谢谢你的建议。我今天学到了很多东西。

添加了:

经验教训:

  • 过程资源管理器在很多方面都是一个很棒的工具。这是值得的 花一些时间学习它的力量。
  • 仔细阅读供应商示例代码并完全理解。为api调用编写小例子并仔细测试。
  • 在没有相应增加堆栈大小的情况下创建失控线程表明存在轻量级信令问题。