次の方法で共有


NdisSetCoalescableTimerObject 関数 (ndis.h)

NdisSetCoalescableTimerObject 関数は、オペレーティング システムが他のタイマーと連携するタイマー オブジェクトを設定します。通常は、タイマーの正確な有効期限がドライバー操作にとって重要でない場合に、電力消費量を削減します。

構文

BOOLEAN NdisSetCoalescableTimerObject(
  [in]           NDIS_HANDLE   TimerObject,
  [in]           LARGE_INTEGER DueTime,
  [in, optional] LONG          MillisecondsPeriod,
  [in, optional] PVOID         FunctionContext,
  [in, optional] ULONG         Tolerance
);

パラメーター

[in] TimerObject

ドライバーが を呼び出すときに NDIS が提供するタイマー オブジェクトへのハンドル NdisAllocateTimerObject 関数。

[in] DueTime

タイマーの有効期限が切れる絶対時間または相対時間。 DueTime パラメーターの値が負の場合、有効期限は現在のシステム時刻に対して相対的になります。 それ以外の場合、有効期限は絶対です。 有効期限は、システム時間単位 (100 ナノ秒間隔) で表されます。 絶対有効期限は、システム時刻の変更を追跡します。相対有効期限は、システム時刻の変更の影響を受けません。

[in, optional] MillisecondsPeriod

タイマーが発生すると、すべてのインスタンスと NetTimerCallback 関数の次の呼び出しの間で経過する、タイマーが取り消されない限り、オプションの定期的な時間間隔 (ミリ秒単位)。 このパラメーターの値は、MAXLONG 以下である必要があります。 このパラメーターは、タイマーが非定期的であることを示す 0 に設定できます。

[in, optional] FunctionContext

タイマーが発生したときに、NDIS が関連付けられている NetTimerCallback 関数に渡す呼び出し元が指定したコンテキスト領域へのポインター。 このパラメーターが NULL の場合、NDIS は で指定された既定値を使用します。 NDIS_TIMER_CHARACTERISTICS 構造体。

[in, optional] Tolerance

MillisecondsPeriod で指定されたタイマー期間と DueTime で指定された初期時間間隔の間の許容誤差 (ミリ秒単位)。 定期的なタイマーは、最初に ( DueTimeTolerance ) と ( DueTime + - Tolerance ) の間の時間間隔で期限切れになります。 定期的なタイマーの 2 つの後の有効期限の間の時間間隔は、 ( ミリ秒間隔 - の許容範囲 ) と ( ミリ秒間隔 + の許容範囲 ) の範囲内になります。

戻り値

NdisSetCoalescableTimerObject は、タイマー オブジェクトがシステム タイマー キューに既に存在する場合に TRUE を 返します。それ以外の場合は、 FALSE を返します

注釈

この関数によって設定されたタイマー オブジェクトは、 NdisSetTimerObject によって設定されたタイマーと同じように動作し、有効期限パラメーター DueTime に追加の許容値が追加されます。 オペレーティング システムでは、この追加の許容値を使用して、他のソフトウェア タイマーの有効期限と一致するようにタイマーの有効期限を調整します。 これにより、オペレーティング システムは電力消費を削減し、エネルギー効率を向上させることができます。

Tolerance が 0 に設定されている場合NdisSetTimerObjectNdisSetCoalescableTimerObject と同様に動作します。

ドライバーが NdisSetCoalescableTimerObject を呼び出した後、タイマー オブジェクトは、 ( DueTimeTolerance ) と ( DueTime + - Tolerance ) の範囲内にある間隔の有効期限が切れるまでキューに入れられます。 間隔が切れると、オペレーティング システムはタイマー オブジェクトをキューから削除し、プロセッサが使用可能になるとすぐに、呼び出し元が指定した NetTimerCallback 関数が IRQL = DISPATCH_LEVELで 1 回実行されます。

MillisecondsPeriod パラメーターに 0 以外の値を指定した場合、タイマー オブジェクトは、 ( MillisecondsPeriodTolerance ) と ( MillisecondsPeriod - Tolerance ) の範囲内の間隔が切れるまで、もう一度キューに + 入れられます。 この間隔が経過すると、タイマー オブジェクトがキューに再送信され、プロセッサが使用可能になるとすぐに、呼び出し元が指定した NetTimerCallback 関数が IRQL = DISPATCH_LEVELで 1 回実行されます。

タイマー結合を効果的に使用するには、呼び出し元で Tolerance 値を 32 ミリ秒以上指定する必要があります。 この値は、約 2 つの既定のシステム クロック間隔 (15.6 ミリ秒) に相当します。 100 ミリ秒など、これを行うことができる場合は、より大きな 許容値 を使用します。

MillisecondsPeriodTolerance を 50 ミリ秒の倍数に設定することをお勧めします。 一般的な ミリ秒Period 値は、50、100、250、500、1000 ミリ秒です。 一般的な 許容値 は、50、100、150、250 ミリ秒です。

通常、 ミリ秒間隔 の値が大きいタイマーでは、比例して大きな Tolerance 値を使用できます。 たとえば、 ミリ秒Period = 500 ミリ秒のタイマーでは 、Tolerance = 50 ミリ秒を使用できます。 ただし、 MillisecondsPeriod = 10 秒のタイマーでは 、Tolerance = 1 秒を使用できます。

タイマー動作の詳細については、「 KeSetTimerEx」を参照してください。

タイマーを取り消すには、 NdisCancelTimerObject 関数を呼び出します。

要件

要件
サポートされている最小のクライアント NDIS 6.20 以降でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

KeSetTimerEx

NDIS_TIMER_CHARACTERISTICS

NdisAllocateTimerObject

NdisCancelTimerObject

NdisSetTimerObject

NetTimerCallback