マルチメディアタイマー

Windows標準のイベントタイマーは精度が低く、最低10ms程度のインターバルしか精度が出ない。それ以下のインターバルのタイマーが欲しければ、マルチメディアタイマーというものがWindows APIに用意されている。使い方は次の通り。

 

#include <mmsystem.h>    /* マルチメディアタイマーに必要 */

//宣言部 

//Callback関数はstaticで且つpublic必須

public:

static void CALLBACK mmTimer(UINT uiID, UINT uiNo, DWORD dwCookie, DWORD dwNo1, DWORD dwNo2);

 

//実装部

//タイマーのコールバック関数

void CALLBACK TForm1::mmTimer(UINT uiID, UINT uiNo, DWORD dwCookie, DWORD dwNo1, DWORD dwNo2)

{

 // タイマーで実行したい内容

}

 

 タイマーイベントのコールバック関数をフォームとかクラスのメンバーとしたい場合は、publicでstaticに宣言しておくのがポイント。

あとは timeSetEvent 関数でタイマーを作成する。timeSetEventを呼んだ後のプロセスの動作を観察してみると、プライオリティ15のスレッドが1個生成される。何も指定しない通常のスレッドはプライオリティ8であるから非常に優先度が高く、高精度が実現されているようである。