Función NdisSetCoalescableTimerObject (ndis.h)
La función NdisSetCoalescableTimerObject establece un objeto de temporizador que el sistema operativo coordina con otros temporizadores, normalmente para reducir el consumo de energía, cuando la expiración exacta del temporizador no es importante para la operación del controlador.
BOOLEAN NdisSetCoalescableTimerObject(
[in] NDIS_HANDLE TimerObject,
[in] LARGE_INTEGER DueTime,
[in, optional] LONG MillisecondsPeriod,
[in, optional] PVOID FunctionContext,
[in, optional] ULONG Tolerance
);
[in] TimerObject
Identificador de un objeto de temporizador que proporciona NDIS cuando un controlador llama a función NdisAllocateTimerObject.
[in] DueTime
Hora absoluta o relativa en la que expirará el temporizador. Si el valor del parámetro DueTime es negativo, la hora de expiración es relativa a la hora actual del sistema. De lo contrario, la hora de expiración es absoluta. El tiempo de expiración se expresa en unidades de tiempo del sistema (intervalos de 100 nanosegundos). Los tiempos de expiración absolutos realizan un seguimiento de los cambios en la hora del sistema; Los tiempos de expiración relativos no se ven afectados por los cambios en la hora del sistema.
[in, optional] MillisecondsPeriod
Intervalo de tiempo periódico opcional, en milisegundos, que transcurre entre cada instancia cuando se activa el temporizador y la siguiente llamada a la función NetTimerCallback, a menos que se cancele el temporizador. El valor de este parámetro debe ser menor o igual que MAXLONG. Este parámetro se puede establecer en cero para indicar que el temporizador no es periódico.
[in, optional] FunctionContext
Puntero a un área de contexto proporcionada por el autor de la llamada que pasa NDIS a la función de NetTimerCallback asociada cuando se desencadena un temporizador. Si este parámetro es NULL, NDIS usa el valor predeterminado especificado en . NDIS_TIMER_CHARACTERISTICS estructura.
[in, optional] Tolerance
Tolerancia, en milisegundos, entre el período de temporizador especificado por milisegundosPeriod y el intervalo de tiempo inicial especificado por DueTime . Un temporizador periódico expirará primero en el intervalo de tiempo entre ( DueTime - Tolerance ) y ( DueTime + Tolerance ). El intervalo de tiempo entre dos expiraciones posteriores de un temporizador periódico estará en el intervalo de ( MilisecondsPeriod - Tolerance ) y ( MilisecondsPeriod + Tolerance ).
NdisSetCoalescableTimerObject devuelve TRUE si el objeto de temporizador ya estaba en la cola del temporizador del sistema; de lo contrario, devuelve FALSE.
Un objeto de temporizador establecido por esta función funciona igual que un temporizador establecido por NdisSetTimerObject, con un valor de tolerancia adicional agregado al parámetro de expiración DueTime . El sistema operativo usa este valor de tolerancia adicional para ajustar el tiempo de expiración del temporizador para que coincida con la expiración de otros temporizadores de software. Al hacerlo, el sistema operativo puede reducir el consumo de energía y mejorar la eficiencia energética.
NdisSetTimerObject funciona de forma similar a NdisSetCoalescableTimerObject cuando tolerance está establecido en cero.
Después de que un controlador llame a NdisSetCoalescableTimerObject, el objeto de temporizador se pone en cola hasta la expiración de un intervalo que se encuentra en el intervalo de ( DueTime - Tolerance ) y ( DueTime + Tolerance ). Después de que expire el intervalo, el sistema operativo quita el objeto de temporizador de la cola y la función de NetTimerCallback proporcionada por el autor de la llamada se ejecuta una vez en IRQL = DISPATCH_LEVEL tan pronto como un procesador esté disponible.
Si se especifica un valor distinto de cero en el parámetro MilisecondsPeriod, el objeto de temporizador se pone en cola de nuevo hasta que un intervalo en el intervalo de ( MilisecondsPeriod - Tolerance ) y ( MilisecondsPeriod + Tolerance ) expira. Una vez expirado este intervalo, el objeto de temporizador se vuelve a enviar a la cola y la función de netTimerCallback proporcionada por el autor de la llamada se ejecuta una vez en IRQL = DISPATCH_LEVEL tan pronto como un procesador esté disponible.
Para usar el temporizador de forma eficaz, un autor de llamada debe especificar un Tolerancia valor de al menos 32 milisegundos. Este valor equivale a aproximadamente dos intervalos de reloj del sistema predeterminados de 15,6 milisegundos. Use un valor de tolerancia de mayor si puede hacerlo, como 100 milisegundos.
Se recomienda establecer milisegundosPeriod y tolerancia en múltiplo de 50 milisegundos. Los valores típicos de MilisecondsPeriod son 50, 100, 250, 500 y 1000 milisegundos. Los valores típicos tolerancia son 50, 100, 150 y 250 milisegundos.
Normalmente, un temporizador con un valor de de MilisecondsPeriod de gran tamaño puede usar un valor de tolerancia de proporcionalmente grande. Por ejemplo, un temporizador con MilisecondsPeriod = 500 milisegundos podría usar tolerancia = 50 milisegundos. Pero un temporizador con milisegundosPeriod = 10 segundos podría usar tolerancia = 1 segundo.
Para obtener más información sobre el comportamiento del temporizador, vea KeSetTimerEx.
Para cancelar un temporizador, llame a la función NdisCancelTimerObject.
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite en NDIS 6.20 y versiones posteriores. |
de la plataforma de destino de | Universal |
encabezado de | ndis.h (incluya Ndis.h) |
biblioteca de | Ndis.lib |
irQL | <= DISPATCH_LEVEL |