CNITimer のインターバルを 450 秒以上に設定すると、設定した時間でイベント発生しません。



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: CNITimer のインターバルを 450 秒以上に設定すると、非規則な周期でイベント発生します。この現象が起こる原因はなんですか。また、回避策はありますか。


解決策: CNITimer は Windows の Multimedia タイマを呼び出します。Multimedia タイマは設定された時間間隔でイベントを発生させます。内部計算に 32 ビットの数値を使用するため、正常動作する時間間隔は最大で 429496 ミリ秒です。時間間隔 x429496 より大きい場合、タイマの値はx - 429496 になります。この現象は既にマイクロソフトに報告されています。詳細は下記リンクをご参照ください。

回避策として、時間間隔を 450 秒未満に設定し、それが何回経過したかを数え上げます。必要な秒数の時間が経ったところで、実際に必要なイベントを呼び出すようにします。たとえば、600 秒の時間間隔で動作せる場合、タイマの時間間隔を 300 秒 に設定します。このタイマのイベントが起こった回数を2回目になると、600 秒経過したことが分かります。

時間間隔が 429496 ミリ秒以下の場合、そのまま使用できます。



関連リンク:
KnowledgeBase 3LPL8QD1: Asynchronous Timer Fires at Irregular Intervals When Interval > 600 Seconds
Microsoft Developer Discussion on Timer Wrap Around

添付:





報告日時: 08/01/2005
最終更新日: 09/26/2005
ドキュメントID: 3O0CPSA8