Функция 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 |