none
MFCのタイマーは正確? RRS feed

  • 質問

  • WM_TIMERでタイマーをセットしたのですが、あまり正確でなく、設定したミリ秒より呼ばれるのが遅い気がします。

     

    1秒間のフレーム数を計るプログラムがまずいのかもしれません。

     

    MFCで30fpsか60fpsで3Dアニメーションを表示したいのですが、正確なフレームレートにするにはどうすればいいでしょうか?

    2007年4月25日 14:41

回答

  • ご参考までに・・・

     

    用途によっては、下記の Mutimedia Timer API でも数msec単位で

    十分な分解能を得られる場合もあります。

     

    timeGetDevCaps

    timeBeginPeriod

    timeSetEvent

    timeEndPeriod

     

    Using Multimedia Timers

    http://msdn2.microsoft.com/en-us/library/ms713454.aspx

     

    私は、3Dアニメーションには使ったことはありませんが、

    ご検討されてみてはいかがでしょうか。

    2007年4月26日 1:01

すべての返信

  • 正確なアニメーションをするためにWM_TIMERは向いていません。フレーム数を気にするアニメーションであれば、DirectXを使う方がよいかと思います。
    2007年4月25日 15:59
  • KKamegawaさん、ありがとうございます。

     

    やっぱりWM_TIMERは向いてないですか・・・。

    2007年4月25日 16:54
  • ご参考までに・・・

     

    用途によっては、下記の Mutimedia Timer API でも数msec単位で

    十分な分解能を得られる場合もあります。

     

    timeGetDevCaps

    timeBeginPeriod

    timeSetEvent

    timeEndPeriod

     

    Using Multimedia Timers

    http://msdn2.microsoft.com/en-us/library/ms713454.aspx

     

    私は、3Dアニメーションには使ったことはありませんが、

    ご検討されてみてはいかがでしょうか。

    2007年4月26日 1:01
  • WM_TIMER はメッセージキューにPostされる形で追加されます。キューのプライオリティが最も低いため、全くなんにもしていない状態でないかぎり、プロシージャにメッセージが届くことはありません。

    #まったくなにもしていないというのは、CPUリソースを使うほかのプログラムがいない状態&&メッセージキューに一切のメッセージがない状態を指します。

     

    上記のことがあるため、精度はあまりたかくなく、狂わせようと思えば、マウスをぐりぐりやってるだけで、簡単にずらせることが出来ます。

    #デジタルタイマーなどで、1秒ごとに受けるようにして、動き始めたらクライアント上でマウスを行ったり来たりさせてみればわかります。

     

    そのため、時間にある程度の精度が求められる場面では全く使い物にならないと思ってください。

    それでも、ある程度とはいえ定期性をもって発行されるので、アニメーション効果などには十分使えるんですけどね。

    #昔そういうアプリ作ったことがあるんで...w

    2007年4月26日 8:01
  • chack - Akira Inoueさん、とっちゃんさん、ありがとうございます。

     

    Multimedia Timersは使えるかもしれません。

     

    MFCのタイマーは精度が気になる場合はあまり役に立たないのですね。

    2007年4月26日 14:27