2009-02-04 3 views
8

Um zu verdeutlichen, ich meine Zeit verbrachte, während die System ist ausgesetzt/überwintert, nicht der aufrufende Thread (GetTickCount() gibt die Anzahl der Millisekunden seit Systemstart).Enthält GetTickCount() die Zeit, die für den Status "Suspended" oder "Hibernated" verbracht wurde?

+0

Dumme Frage, was passiert, wenn Sie das versuchen? Ich würde das auch, weil ich neugierig auf die Antwort bin, aber ich habe momentan keine aussetzbare Windows-Maschine zur Hand. –

Antwort

5

Soweit ich weiß, hat GetTickCount nichts mit Threads zu tun und zählt die Zeit seit dem Systemstart. Aber es ist besser, GetTickCount64 zu verwenden, um den 49,7 Tage dauernden Roleover zu vermeiden.

Übrigens, um zu bekommen, was Sie wollen, brauchen Sie die GetThreadTimes Funktion. Es zeichnet die Erstellungs- und Austrittszeit und die Zeit auf, die der Thread im Benutzer- oder Kernelraum verbracht hat. So haben Sie einen schönen Weg, um die Höhe der Zeit zu berechnen.

Ok, ich habe den "System" -Teil der Frage verpasst. Aber das ist einfach. Im Ruhezustand setzt GetTickCount die Zählung fort. Weil die Leute unter dem 49,7-Tage-Fehler gelitten haben, als der Computer die meiste Zeit im Ruhezustand war. Weitere Informationen finden Sie unter link text.

+0

Ich denke, die ursprüngliche Frage bezieht sich darauf, ob das * System * ausgesetzt oder überwintert ist, nicht ein bestimmter Thread. –

+1

Punkt. Ich habe das komplett vermisst. –

0

GetTickCount() gibt Ihnen die Zeit in Millisekunden seit dem Start des Computers. Es hat nichts mit dem Prozess zu tun, der es aufruft.

+0

Was ist, wenn der Computer im Ruhezustand ist nicht der Prozess ... – JoshBerke

+0

Ich nehme an, der beste Weg, um herauszufinden, ist es nur zu testen. – shoosh

5

Kurze Antwort: Ja.

Lange Antwort: Lesen Sie die GetTickCount() docs: Es ist die verstrichene Zeit seit Systemstart und sogar MS würde vorschlagen, nicht, dass die Zeit still steht, während der Computer im Ruhezustand ...

-3

Nein, GetTickCount() beinhaltet nicht die Zeit, die das System während des Winterschlafs benötigt. Ein einfacher Test beweist das.

in Python:

import win32api 
win32api.GetTickCount() 

- Sie überwintern -

win32api.GetTickCount() 

und Sie werden das Ergebnis ...

+0

Flat falsch und nicht hilfreich - dieses Bit von Python hat keine Möglichkeit, Sie zwischen den GetTickCount Calls Winterschlaf zu halten –

+0

Falsch hier, nur getestet – Evgenyt

2

sehen Ja, GetTickCount Zeit nicht enthalten Suspend/Hibernate .

Im folgenden Python-Skript rufe ich die Sleep-API auf, um 40 Sekunden zu warten, damit ich den Computer in den Ruhezustand versetzen kann. Ich drucke die Zeit davor und danach und die Tick-Zähldifferenz nach.

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)

Ausgang:

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

Wenn GetTickCount nicht enthielt die Zeit, während es viel weniger überwintern wäre als die Zeit, die ich für überwinterte, aber es entspricht die tatsächliche Zeit verstrichen (7 Minuten 22 Sekunden gleich 442 Sekunden, dh 442000 Millisekunden "Ticks".

1

Für eine für Antwort unter Windows CE-Plattform suchen, von docs:

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

Sie lesen können:

Zu Release-Konfigurationen, gibt diese Funktion die Anzahl der Millisekunden seit Das Gerät wurde gestartet, mit Ausnahme der Zeit, in der das System ausgesetzt wurde. GetTickCount startet beim Start bei 0 und zählt dann von dort .

Verwandte Themen