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 に答える