カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

タイマーイベント

ウィンドウを持つフォームの環境ではタイマーイベントを利用することができます。

このタイマーは、再生が終わったサウンドバッファの回収や、送信が終わったMIDIシステムエクスクルーシブメッセージの回収など、あまり精度を必要としない、時間間隔も比較的長い用途に用いるものです。高い精度が必要なときは、後述のマルチメディアタイマーが適してします。
ウィンドウを持たないDLLでタイマーが必要なときは、後述のサブスレッドを利用する必要があります。

タイマーの起動

SetTimer()関数でタイマーをウィンドウハンドルを関連付けるとWM_TIMERメッセージが定期的にウィンドウのメッセージキューに送られます。WM_TIMERメッセージをディスパッチすることで定期的な処理を行うことができます。

関数が成功するとタイマーの識別子が戻ります。

UINT_PTR SetTimer(
    HWND        hWnd,
    UINT_PTR    nIDEvent,
    UINT        uElapse,
    TIMERPROC   lpTimerFunc);

hWnd

WM_TIMERメッセージを送るウィンドウハンドルです。

nIDEvent

タイマーの識別子です。複数のタイマーを起動するとき、異なる値を指定します。

uElapse

メッセージが送信されるインターバルです。単位はmSecです。

lpTimerFunc

WndProc()関数でWM_TIMERメッセージをディスパッチすることでタイマー処理を行うことができます。このときlpTimerFuncパラメータはNULLにします。

LRESULT FAR PASCAL WndProc(
    HWND        hWnd,
    UINT        message,
    WPARAM      wParam,
    LPARAM      lParam)
{
    switch (message)
    {
    case WM_TIMER:
        // TODO:
        break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

lpTimerFuncを指定すると、デフォルトのウィンドウプロシージャDefWindowProc()関数がWM_TIMERメッセージを処理するとき指定されたコールバック関数を呼び出します。

コールバック関数

lpTimerFuncで用いるコールバック関数を示します。

VOID CALLBACK TimerProc(
    HWND        hwnd,
    UINT        uMsg,
    UINT_PTR    idEvent,
    DWORD       dwTime)

hWnd

タイマーに関連付けられているウィンドウハンドルです。

uMsg

WM_TIMERメッセージです。

idEvent

SetTimer()関数が戻したタイマーの識別子です。

dwTime

システム時刻です。これはシステムが起動してからの経過時間で、timeGetTime()関数によって得られる値と同じです。

このタイマーコールバックはセクション「高精度コールバック」で解説しているtimeSetEvent()による関数とは異なるので注意して下さい。

タイマーの停止

KillTimer()関数でタイマーを停止します。

BOOL KillTimer(
    HWND        hWnd,
    UINT_PTR    uIDEvent)

hWnd

タイマーに関連付けられているウィンドウハンドルです。SetTimer()関数で指定したウィンドウハンドルと同じものでなければなりません。

uIDEvent

タイマーの識別子です。SetTimer()関数が戻した値を指定します。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ