WdfTimerStart 関数 (wdftimer.h)

[KMDF と UMDF に適用]

WdfTimerStart メソッドはタイマーのクロックを開始します。

構文

BOOLEAN WdfTimerStart(
  [in] WDFTIMER Timer,
  [in] LONGLONG DueTime
);

パラメーター

[in] Timer

WdfTimerCreate を呼び出して取得したフレームワーク タイマー オブジェクトへのハンドル。

[in] DueTime

システム時間単位 (100 ナノ秒間隔) の期間。 フレームワークは、指定された期間が経過すると、ドライバーの EvtTimerFunc コールバック関数を呼び出します。 期間の値は、次のように負または正にすることができます。

  • 値が負の場合、期間は現在のシステム時刻を基準とします。
  • 値が正の場合、期間は絶対時間を指定します (実際には 1601 年 1 月 1 日を基準とします)。

警告

WDF_TIMER_CONFIGUseHighResolutionTimer メンバーを WdfTrue に設定した場合は、DueTime パラメーターを負の値に設定して WdfTimerStart を呼び出す必要があります。 それ以外の場合、呼び出しによってシステムがクラッシュします。

相対時間は、指定された期間内に発生する可能性があるシステム時刻の変更の影響を受けません。 絶対時間は、システム時刻の変更を反映します。

フレームワークには、時間値をシステム時間単位に変換する時間 変換関数 が用意されています。

戻り値

タイマー オブジェクトがシステムのタイマー キューにある場合、WdfTimerStartTRUE を返します。 それ以外の場合、このメソッドは FALSE を返します。 詳細については、「解説」を参照してください。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

注釈

ドライバーは、タイマーが定期的なタイマーであるかどうかに関係なく、作成後にタイマーを開始するには、常に WdfTimerStart を呼び出す必要があります。

ドライバーが WdfTimerStart を呼び出した後、DueTime パラメーターに指定された時間が経過すると、フレームワークはドライバーの EvtTimerFunc コールバック関数を呼び出します。 この最初の呼び出しの後、フレームワークは、ドライバーのWDF_TIMER_CONFIG構造体の Period メンバーによって指定された期間が経過するたびにコールバック関数 呼び出します。

タイマーの有効期限は、最終的にはシステム クロックの粒度によって異なります。 DueTime に指定された値を指定すると、フレームワークは、指定された DueTime のオンまたは後にドライバーの EvtTimerFunc コールバック関数を呼び出します。 ただし、 WdfTimerStart では、 DueTime に指定された値に関係なく、システム クロックの粒度をオーバーライドすることはできません。

ドライバーが WdfTimerStart を呼び出すと、そのタイマー オブジェクトがシステムのタイマー オブジェクトのキューに追加されます。 タイマーが定期的なタイマーでない場合、システムはタイマーの "期限" が経過した後、キューからタイマー オブジェクトを削除します。 タイマーが定期的なタイマーの場合、ドライバーが WdfTimerStop を呼び出すまで、タイマー オブジェクトはキューに残ります。

ドライバーは、有効期限が切れた後に非定期的なタイマーを再起動するために、EvtTimerFunc コールバック関数から WdfTimerStart を呼び出す場合があります。

ドライバーが以前に WdfTimerStart を呼び出していて、期間が経過していないため (または定期的なタイマーであるため) タイマー オブジェクトがまだシステムのキューにある場合、WdfTimerStartTRUE を返します。 WdfTimerStart がTRUE を返す前に、オペレーティング システムは、WdfTimerStart の新しい呼び出しでドライバーが指定した値に期間をリセットします。 フレームワークは、新しい期間が経過した後にのみ EvtTimerFunc コールバック関数を呼び出します。

タイマーのクロックを停止するために、ドライバーは WdfTimerStop を呼び出すことができます。

フレームワーク タイマー オブジェクトの詳細については、「タイマーの 使用」を参照してください。

次のコード例では、タイマーを開始します。 フレームワークは、10 ミリ秒後にタイマーの EvtTimerFunc コールバック関数を呼び出します。

BOOLEAN inTimerQueue;

inTimerQueue = WdfTimerStart(
                             timerHandle,
                             WDF_REL_TIMEOUT_IN_MS(10)
                             );

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdftimer.h (Wdf.h を含む)
Library Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)

こちらもご覧ください

EvtTimerFunc

WDF_TIMER_CONFIG

WdfTimerCreate

WdfTimerStop