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 を呼び出す必要があります。 それ以外の場合、呼び出しによってシステムがクラッシュします。

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

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

戻り値

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

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

備考

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

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

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

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

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

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

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

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

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

BOOLEAN inTimerQueue;

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

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.0
UMDF の最小バージョン する 2.0
ヘッダー wdftimer.h (Wdf.h を含む)
ライブラリ Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

関連項目

EvtTimerFunc

WDF_TIMER_CONFIG

WdfTimerCreate

WdfTimerStop