2

初めてのポスターはこちら。

Windows XP SP2 の C++ (MSVC) でマルチスレッド ストリーミング オーディオ アプリケーションを作成しています。

私が遭遇した問題は、タスク バーでアプリケーションを最小化/復元すると、ウィンドウ アニメーションがアクティブな間、アプリケーション内のすべてのスレッドが中断されることです。ウィンドウが最小化または復元されるたびに、アプリケーションのオーディオが途切れる原因となるため、これは私に影響を与えます。

ウィンドウ/システムプロパティ/詳細/パフォーマンス「視覚効果、プロセッサスケジューリング、...」/設定/カスタムタブの「最大化を最小化するときにウィンドウをアニメーション化する」というタイトルのチェックボックスをオフにすると、この問題が解決するようです。

プロセスの優先度を「高」および「リアルタイム」に調整しても効果がありません。

このトピックに光を当てるのを手伝ってくれる人はいますか?

4

1 に答える 1

3

これらのアニメーション、またはウィンドウをドラッグしながらペイントすると (同様の問題が発生するはずです)、Windows メッセージ キューが WM_PAINT メッセージであふれ、ウィンドウ内のすべての小さなウィジェット/コントロールが再描画されます。これにより、コンピューターとその上で実行されているすべてのスレッドとプロセスが完全に停止する可能性があります。

考えられる解決策は次の 2 つです。

  • ウィンドウをフリーズします。つまり、ウィンドウのサイズ変更/最小化/ドラッグ中に WM_PAINT メッセージを破棄します。これは、ある種のフラグ (lockRedraw) などを使用して行うこともできます。

    • 優先度を変更しても問題は解決しません。wxp のスケジューリング戦略については何も知りませんが、問題が増える可能性さえあります。

編集:実際の2番目の解決策を忘れました:

  • オーディオにはより大きなバッファを使用してください。0.5 秒または 1 秒のバッファを一度にサウンド カードに渡すことができれば、マルチスレッド環境で絶対に安全な側にいるはずです。

再編集: まあ、私はあなたが任意のウィンドウを言ったことを見落としていました. より大きなバッファーを使用する解決策 2 のみが役立つ可能性があります。サウンド バッファは通常、ハードウェア上の何らかのバッファにスローされますが、そこにあるとすぐに問題になることはありません。

もう 1 つの可能性が思い浮かびます。これらのアニメーションは、サウンドの下敷きになっています。最大化/最小化のために設定したサウンドの種類を確認します。それをオフにして、もう一度やり直してください

問題が解決しない場合は、グラフィック カード ドライバの不良が原因である可能性があります。そうでない場合は、サウンド (おそらく directSound? わからない) の設定がすべて整っているかどうかを確認します。おそらく、コーディングできるリソースの競合がいくつかあります。(ハードウェア マネージャーではなく、サウンド デバイスにアクセスする方法で。)

于 2009-04-15T16:50:52.470 に答える