<Return[C]><Top>

CreateTimerQueueTimer

Declare Function Api_CreateTimerQueueTimer& Lib "kernel32" (ByRef phNewTimer&, ByVal TimerQueue&, ByVal Callback&, ByVal Parameter&, ByVal DueTime&, ByVal Period&, ByVal Flags&)

Declare Function CreateTimerQueueTimer Lib "kernel32.dll" (ByRef phNewTimer As Long, ByVal TimerQueue As Long, ByVal Callback As Long, ByVal Parameter As Long, ByVal DueTime As Long, ByVal Period As Long, ByVal Flags As Long) As Long

タイマキュータイマを作成する。このタイマは、指定した時間が経過するとシグナル状態になる。その後、指定した時間が経過するたびにシグナル状態になる。シグナル状態になると、コールバック関数が呼び出される。

パラメータ
phNewTimer
    タイマキュータイマのハンドルを受け取るバッファへのポインタを指定する。
TimerQueue
    タイマキューのハンドルを指定する。CreateTimerQueue 関数で取得したハンドルを使う。
Callback
    指定時間が経過したときに実行する WAITORTIMERCALLBACK 型のアプリケーション定義関数へのポインタを指定する。
Parameter
    コールバック関数に渡す唯一のパラメータ値を指定する。
DueTime
    タイマをシグナル状態に設定するまでの時間をミリ秒単位で指定する。
Period
    タイマをシグナル状態に設定する間隔( 周期)をミリ秒単位で指定する。0 を指定すると、タイマは一度だけシグナル状態になる。0 より

    大きい値を指定すると、タイマは周期タイマになる。周期タイマは、取り消されるまで、特定の周期で繰り返しシグナル状態に設定される。

    このパラメータに 0 より小さい値を指定すると、関数は失敗する。
Flags
    次の 2 つ以上のフラグをセットする。

    フラグ                                                            

意味                                                                                                         

    WT_EXECUTEINTIMERTHREAD

 

コールバック関数をタイマスレッド自体が呼び出す。このフラグは、短いタスクを実行する場合、または他の待機操作に影響を与える恐れがある場合にだけセットする。

    WT_EXECUTEINIOTHREAD

 

 

コールバック関数を I/O ワーカースレッドのキューに入れる。未処理の非同期 I/O 要求があると終了しないスレッドでこの関数を実行する場合は、このフラグをセットする。
コールバック関数は APC としてキューに入る。関数がアラート可能な待機操作を実行する場合は必ず再入の問題に対処する。

    WT_EXECUTEINPERSISTENTIOTHREAD

 

 

終了することのないスレッドのキューにコールバック関数を入れる。
現在、永続的なワーカースレッドはありませんが、ワーカースレッドは未処理の I/O 要求が残っているかぎり終了しない。

    WT_EXECUTELONGFUNCTION

 

コールバック関数が長い待機動作を実行できるようにする。このフラグは、システムが新しいスレッドを作成するかどうか判断するのを助ける。このフラグをセットする場合は、WT_EXECUTEINIOTHREAD フラグも必ずセットする。

    WT_EXECUTEONLYONCE

 

コールバック関数が呼び出されると、それ以降、スレッドはハンドル上で待機しない。このフラグをセットしない場合、スレッドは待機操作が取り消されるまでハンドル上で待機する。


戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、 関数を使う。

解説
    DueTime パラメータと Period パラメータの両方に 0 以外の値を指定すると、タイマはまず DueTime で指定した時間が経過するとシグナル

    状態になり、その後、Period パラメータで指定した間隔で周期的にシグナル状態になる。
    タイマを取り消すには、DeleteTimerQueueTimer 関数を使う。タイマキューにあるすべてのタイマを取り消すには、DeleteTimerQueueEx

    関数を使う。