マルチメディアタイマー
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であるから非常に優先度が高く、高精度が実現されているようである。