Share via


Acerca de temporizadores

En este tema se describe cómo crear, identificar, establecer y eliminar temporizadores. Una aplicación usa un temporizador para programar un evento para una ventana una vez transcurrido un tiempo especificado. Cada vez que transcurre el intervalo especificado (o el valor de tiempo de espera) de un temporizador, el sistema notifica a la ventana asociada al temporizador. Dado que la precisión de un temporizador depende de la velocidad del reloj del sistema y de la frecuencia con la que la aplicación recupera los mensajes de la cola de mensajes, el valor de tiempo de espera solo es aproximado.

Este tema contiene las siguientes secciones.

Operaciones del temporizador

Las aplicaciones crean temporizadores mediante la función SetTimer. Un nuevo temporizador comienza a sincronizar el intervalo en cuanto se crea. Una aplicación puede cambiar el valor de tiempo de espera de un temporizador mediante SetTimer y puede destruir un temporizador mediante la función KillTimer. Para usar los recursos del sistema de forma eficaz, las aplicaciones deben destruir temporizadores que ya no son necesarios.

Cada temporizador tiene un identificador único. Al crear un temporizador, una aplicación puede especificar un identificador o hacer que el sistema cree un valor único. El primer parámetro de un mensaje de WM_TIMER contiene el identificador del temporizador que publicó el mensaje.

Si especifica un identificador de ventana en la llamada a SetTimer, la aplicación asocia el temporizador a esa ventana. Cada vez que transcurre el valor de tiempo de espera del temporizador, el sistema envía un mensaje WM_TIMER a la ventana asociada al temporizador. Si no se especifica ningún identificador de ventana en la llamada a SetTimer, la aplicación que creó el temporizador debe supervisar su cola de mensajes para WM_TIMER mensajes y enviarlos a la ventana adecuada.

Nota:

Si especifica la función de devolución de llamada TIMERPROC opcional, se llama a la función durante el bucle de mensajes y WM_TIMER no se envía a la devolución de llamada WNDPROC..

Si necesita recibir una notificación cuando transcurre un temporizador, use un temporizador de espera. Para obtener más información, vea Objetos de temporizadorque se pueden esperar.

Temporizador de alta resolución

Un contador es un término general que se usa en la programación para hacer referencia a una variable de incremento. Algunos sistemas incluyen un contador de rendimiento de alta resolución que proporciona tiempos transcurridos de alta resolución.

Si existe un contador de rendimiento de alta resolución en el sistema, puede usar la función QueryPerformanceFrequency para expresar la frecuencia, en recuentos por segundo. El valor del recuento depende del procesador. En algunos procesadores, por ejemplo, el recuento podría ser la velocidad de ciclo del reloj del procesador.

La función QueryPerformanceCounter recupera el valor actual del contador de rendimiento de alta resolución. Al llamar a esta función al principio y al final de una sección de código, una aplicación básicamente usa el contador como un temporizador de alta resolución. Por ejemplo, supongamos que QueryPerformanceFrequency indica que la frecuencia del contador de rendimiento de alta resolución es de 50 000 recuentos por segundo. Si la aplicación llama a QueryPerformanceCounter inmediatamente antes e inmediatamente después de la sección del código que se va a programar, los valores de contador pueden ser 1500 y 3500 recuentos, respectivamente. Estos valores indicarían que transcurrió .04 segundos (recuentos de 2000) mientras se ejecutaba el código.

Objetos temporizadores esperables

Un objeto de temporizador de espera es un objeto de sincronización cuyo estado se establece en señalado cuando llega el tiempo de vencimiento especificado. Hay dos tipos de temporizadores de espera que se pueden crear: restablecimiento manual y sincronización. Un temporizador de cualquier tipo también puede ser un temporizador periódico.

Un subproceso usa la función CreateWaitableTimer o CreateWaitableTimerExpara crear un objeto de temporizador. El subproceso de creación especifica si el temporizador es un temporizador de restablecimiento manual o un temporizador de sincronización. El subproceso de creación puede especificar un nombre para el objeto de temporizador. Los subprocesos de otros procesos pueden abrir un identificador en un temporizador existente especificando su nombre en una llamada a la función OpenWaitableTimer. Cualquier subproceso con un identificador para un objeto de temporizador puede usar una de las funciones de espera para esperar a que el estado del temporizador se establezca en señalizado.

Para obtener más información sobre el uso de objetos de temporizador de espera para la sincronización de subprocesos, vea Objetos de temporizadorque se pueden esperar.