1

アニメーション GIF 画像を表示する小さなアプリケーションがあります。GIF フレームは HBITMAP として保存されます。ウィンドウプロシージャで WM_TIMER イベントが発生したときに、タイマーを設定して bitblt 関数を使用するだけで、簡単にアニメーションを実行できます。また、タイマーは適切な遅延に設定されていますが、私の GIF アニメーションは、ブラウザ内の同じファイルのアニメーションよりもわずかに遅くなります。問題は、タイマーを使用して仕事をするよりも良い方法があるか、それとも問題がコードにあるのかということです。

4

1 に答える 1

1

WM_TIMER の精度は、Windows クロックの割り込みレートと UI スレッドの応答性によって決まります。デフォルトでは、クロックは 1 秒あたり 64 回、15.625 ミリ秒ごとに 1 回刻みます。タイマーはそれより正確になることはありません。つまり、たとえば 10 ミリ秒を要求すると、15.625 ミリ秒が経過するまで WM_TIMER メッセージは表示されません。同様に、16 ミリ秒を要求すると、2 x 15.625 = 31.250 ミリ秒が経過するまでメッセージが表示されません。

GIF 形式では、フレームのアニメーション時間を 10 ミリ秒単位で指定します。そのため、それだけでアニメーションが意図したよりも長くなるのに十分です。

timeBeginPeriod() を呼び出すことで、WM_TIMER の精度を変更できます。10 のピリオドを要求することは、論理的な選択です。完了したら timeEndPeriod() を呼び出します。

于 2013-10-02T17:13:03.443 に答える