2009-02-04 7 views
8

Para aclarar, me refiero al tiempo pasado mientras el sistema está suspendido/hibernado, no el hilo de llamada (GetTickCount() devuelve el número de milisegundos desde el inicio del sistema).¿Incluye GetTickCount() tiempo suspendido o hibernado?

+0

Pregunta tonta, ¿qué ocurre cuando pruebas esto? Lo haría porque tengo curiosidad acerca de la respuesta también, pero no tengo a mano una máquina de Windows que se pueda suspender en este momento. –

Respuesta

5

Hasta donde yo sé, GetTickCount no está relacionado con los hilos y cuenta el tiempo transcurrido desde que se inició el sistema. Pero es mejor usar GetTickCount64 para evitar el roleover de 49.7 días.

Por cierto, para obtener lo que necesita, necesita la función GetThreadTimes. Registra la creación y el tiempo de salida y la cantidad de tiempo que el hilo ha pasado en el usuario o en el espacio del kernel. Entonces, tienes una buena forma de calcular la cantidad de tiempo que gastas.

Ok, me perdí la parte del "sistema" de la pregunta. Pero eso es simple. Cuando está en hibernación GetTickCount continúa el recuento. Porque la gente ha sufrido el error de 49.7 días cuando la computadora estaba en hibernación la mayor parte del tiempo. Vea link text aquí para más información.

+0

Creo que la pregunta original se refiere a si el * sistema * está suspendido o hibernado, no un hilo en particular. –

+1

Point. Completamente perdido ese. –

0

GetTickCount() le da el tiempo en milisegundos desde que la computadora arrancó. no tiene nada que ver con el proceso que lo llama.

+0

¿Qué pasa si la computadora está en hibernación, no el proceso ... – JoshBerke

+0

Supongo que la mejor manera de averiguarlo es simplemente probarlo. – shoosh

5

Respuesta corta: Sí.

Respuesta larga: Lea las GetTickCount() docs: Es la transcurrido vez desde el inicio del sistema, e incluso la EM no sugeriría que el tiempo se detiene mientras el ordenador está hibernando ...

-3

No, GetTickCount() no incluye el tiempo que el sistema pasa durante la hibernación. Una prueba simple lo demuestra.

en Python:

import win32api 
win32api.GetTickCount() 

- do hibernar -

win32api.GetTickCount() 

y podrás ver el resultado ...

+0

plan incorrecto y no útil - este bit de pitón no tiene forma de permitirle hibernar entre las llamadas a GetTickCount –

+0

Incorrecto aquí, recién probado – Evgenyt

2

Sí, GetTickCount Qué incluye suspender/hibernar tiempo .

En la siguiente secuencia de comandos de python llamo a la API de suspensión para esperar 40 segundos para darme la oportunidad de poner la computadora en modo de hibernación, imprimir la hora anterior y posterior, y la diferencia de conteo de ticks después.

import win32api 
import time 
print time.strftime("%H:%M:%S", time.localtime()) 
before = win32api.GetTickCount() 
print "sleep" 
win32api.Sleep(40000) 
print time.strftime("%H:%M:%S", time.localtime()) 
print str(win32api.GetTickCount()-before)

Salida:

17:44:08 
sleep 
17:51:30 
442297

Si GetTickCount no incluye el tiempo durante hibernación sería mucho menor que el tiempo que hibernado para, pero coincide con el tiempo real transcurrido (7 minutos 22 segundos equivalen 442 segundos, es decir, "tics" de 442000 milisegundos).

1

Para cualquiera que busque la respuesta a la plataforma Windows CE, a partir de documentos:

http://msdn.microsoft.com/en-us/library/ms885645.aspx

se puede leer:

Para las configuraciones de la versión, esta función devuelve el número de milisegundos desde el dispositivo arrancó, excluyendo cualquier momento en que se suspendió el sistema . GetTickCount comienza en 0 en el arranque y luego cuenta desde allí.

Cuestiones relacionadas