Поделиться через


Функция 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. Этот параметр можно задать равным нулю, чтобы указать, что таймер не является периодическим.

[in, optional] FunctionContext

Указатель на область контекста, предоставляемую вызывающим объектом, которая NDIS передает связанной функции NetTimerCallback при срабатывании таймера. Если этот параметр NULL, NDIS использует значение по умолчанию, указанное в . структура NDIS_TIMER_CHARACTERISTICS.

[in, optional] Tolerance

Допустимое значение в миллисекундах между периодом таймера, указанным в МиллисекундахPeriod, и начальным интервалом времени, указанным DueTime. Периодический таймер впервые истекает в интервале времени между (DueTime - отказоустойчивостью) и (DueTime + отказоустойчивости). Интервал времени между двумя последующими сроками действия периодического таймера будет находиться в диапазоне (МиллисекундыPeriodsPeriod - ) и (МиллисекундыPerio + d).

Возвращаемое значение

NdisSetCoalescableTimerObject возвращает TRUE, если объект таймера уже находится в очереди системного таймера; в противном случае возвращается FALSE.

Замечания

Объект таймера, заданный этой функцией, работает так же, как таймер, заданный NdisSetTimerObject, с дополнительным значением допуска, добавленным в параметр окончания срока действия DueTime. Операционная система использует это дополнительное значение допуска для настройки срока действия таймера, чтобы совпасть с истечением срока действия других таймеров программного обеспечения. Благодаря этому операционная система может снизить потребление энергии и повысить эффективность энергии.

NdisSetTimerObject работает аналогично NdisSetCoalescableTimerObject, если для равно нулю.

После вызова драйвера NdisSetCoalescableTimerObjectобъект таймера помещается в очередь до истечения срока действия интервала ( DueTime - отказоустойчивости) и (DueTime + отказоустойчивости). После истечения срока действия интервала операционная система удаляет объект таймера из очереди, а вызывающая функция NetTimerCallback выполняется один раз в IRQL = DISPATCH_LEVEL, как только процессор становится доступным.

Если ненулевое значение указано в параметре MillisecondsPeriod, объект таймера снова помещается в очередь до истечения интервала (МиллисекундыPeriod - допуска) и (МиллисекундаPeriodsPeriod + терпимости). После истечения этого интервала объект таймера повторно отправляется в очередь, и вызывающая функция NetTimerCallback выполняется один раз в IRQL = DISPATCH_LEVEL, как только процессор становится доступным.

Чтобы эффективно использовать объединение таймера, вызывающий объект должен указать допустимость значение не менее 32 миллисекунда. Это значение равно примерно двум интервалам системных часов по умолчанию в 15,6 миллисекундах. Используйте большее значение допуска, если это можно сделать, например 100 миллисекундах.

Мы рекомендуем задать МиллисекундыPeriod и допустимости 50 миллисекунд. Типичные значения МиллисекундыPeriod: 50, 100, 250, 500 и 1000 миллисекунд. Типичными значениями допустимости являются 50, 100, 150 и 250 миллисекунд.

Как правило, таймер с большим значением МиллисекундыPeriod может использовать пропорционально большое значение допуска. Например, таймер с Миллисекунда = 500 миллисекундах может использовать терпимости = 50 миллисекунда. Но таймер с МиллисекундыPeriod = 10 секунд может использовать допуска = 1 секунду.

Дополнительные сведения о поведении таймера см. в разделе KeSetTimerEx.

Чтобы отменить таймер, вызовите функцию NdisCancelTimerObject.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается в NDIS 6.20 и более поздних версиях.
целевая платформа Всеобщий
заголовка ndis.h (include Ndis.h)
библиотеки Ndis.lib
IRQL <= DISPATCH_LEVEL

См. также

KeSetTimerEx

NDIS_TIMER_CHARACTERISTICS

NdisAllocateTimerObject

NdisCancelTimerObject

NdisSetTimerObject

NetTimerCallback