sysinfoapi.h

GetTickCount

Recupera el número de milisegundos que han transcurrido desde que el sistema arrancó, hasta 49.7 días.

DWORD GetTickCount();

Valor de retorno

El valor de retorno es el número de milisegundos trasncurridos desde el arranque del sistema.

Observaciones

La resolución de la función GetTickCount está limitada por la resolución del temporizador del sistema, que normalmente está en el rango entre 10 y 16 milisegundos. La resolución del la función GetTickCount no se ve afectada por los ajustes hechos por la función GetSystemTimeAdjustment.

El tiempo transcurrido se almacena en un valor DWORD. Así que el tiempo vuelve a pasar por cero si el sistema se ejecuta continuamente 49.7 días. Para evitar este problema usar la función GetTickCount64. En caso contrario, verificar si se ha producido un desbordamiento cuando se comparen tiempos.

Si se necesita un reloj de mayor resolución, usar un temporizador multimendia o uno de alta resolución.

Para obtener el tiempo transcurrido desde el inicio del equipo, se puede recuperar el contador System Up Time en los datos de rendimiento en la clave de registro HKEY_PERFORMANCE_DATA. El valor retornado es un valor de 8 bytes.

Para obtener el tiempo en estado de trabajo que el sistema ha empleado desde que arrancó, usar la función QueryUnbiasedInterruptTime.

Nota: La función QueryUnbiasedInterruptTime produce resultados diferentes en compilaciones de depuración ("comprobadas") de Windows, porque el contador de tiempo de interrupción y el de tick count han avanzado aproximadamente 49 días. Estp ayuda a identificar bugs que pueden no ocurrir si el sistema no ha estado en ejecución durante mucho tiempo. La compilación comprobada está disponible para suscriptores MSDN a través del sitio web Microsoft Developer Network (MSDN).

Ejemplo

// calculate a 't' value that will linearly interpolate from 0 to 1 and back every 20 seconds
DWORD currentTime = GetTickCount();
if ( m_startTime == 0 )
{
    m_startTime = currentTime;
}
float t = 2 * (( currentTime - m_startTime) % 20000) / 20000.0f;
if (t > 1.0f)
{
    t = 2 - t;
}