2009-04-15 6 views
2

初めてのポスターはここにあります。ウィンドウのアニメーションを最小限に抑えてWin32アプリを一時停止

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

私が遭遇した問題は、タスクバー上のアプリケーションを最小化/復元すると、ウィンドウアニメーションがアクティブな間、アプリケーション内のすべてのスレッドが一時停止されるという問題です。これは、ウィンドウが最小化または復元されるたびに、アプリケーション内のオーディオが吃音を引き起こすため、私に影響します。

Windows /システムプロパティ/アドバンスト/パフォーマンス "ビジュアルエフェクト、プロセッサースケジューリング、..."/Settings/Customタブの "最大化を最小化するときのウィンドウのアニメーション"チェックボックスをオフにすると、この問題が解決されるようです。

プロセスの優先度を「高」と「リアルタイム」に調整することは役に立ちません。

誰でもこのトピックについていくつかの光を当てることができますか?

答えて

3

これらのアニメーション、またはそれをドラッグ中にウィンドウを描く周り (同様の問題を作成する必要があります)WM_PAINTメッセージで Windowsメッセージキューをフラッディングし、それ自体を再描画する あなたのウィンドウ内のすべての少しのウィジェット/コントロールを引き起こします。 これは、コンピュータとすべてのスレッド とそれで実行されているプロセスを完全に停止させる可能性があります。

2つの解決策:

  • あなたのウィンドウを凍結するには、そのウィンドウがドラッグされている/最小化/リサイズされ ながら任意のWM_PAINTメッセージを捨てています。何らかの種類のフラグ(lockRedraw)などを使用して を行うこともできます。優先度を変更

    • は、私がWXPのスケジューリング戦略について何も知りませんが、それも問題 が増加する可能性があります、あなたを助けにはなりません。

編集:あなたのオーディオのための大きなバッファを使用

  • :実際の第二の溶液を忘れてしまいました。よく私はあなたがいずれかをsaydことを見落とし:あなたは1つの急襲でサウンドカードに多分半分または全 秒のバッファを渡すことができれば、あなたは絶対にマルチスレッド環境で安全側に

REEDITする必要がありますウィンドウ。より大きいバッファを使用するソリューション2だけがそこに役立つかもしれません。 サウンドバッファは、通常、ハードウェア上のいくつかのバッファにスローされ、そこにあるとすぐに問題にはなりません。

別の可能性が考えられます: これらのアニメーションにはサウンドが下にあります。 が最大化/最小化のためにセットアップされた音の種類を確認してください。そのスイッチをオフにしてもう一度お試しください

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

+0

ok。最後の編集はコメントとして提供されます: 私は、アニメーションに関係なくサウンドが再生されていることを思い出しました。アニメーションはあなたのCPUをスパイクしますか? – AndreasT

+0

第2の解決策はより可能性が高いと思われる。 (Spy ++は、1分あたり約3〜6ペイン​​トのメッセージを表示します) はい、私はdsound/softwareバッファを使用しています。より大きなオーディオバッファが助けになりますが、全体的な問題は、dsoundへのオーディオを配信している他のスレッドが停止していることです。リアルタイムの音声を転送しています。 –

+0

Nope。 CPUはwindowerアニメーション中にアイドルです。 –

関連する問題