2013-03-19 18 views
5

Desidero sapere cosa misura effettivamente l'API di Windows GetTickCount()? Misura il tempo dal momento in cui viene premuto il pulsante di accensione del sistema? Misura anche il tempo impiegato dai bootloader o dal BIOS per caricare? Sto provando a misurare il tempo di avvio su Windows 7.Che cosa misura effettivamente GetTickCount()?

+1

'GetTickCount' di quale sistema ???? http://en.wikipedia.org/wiki/GetTickCount – leppie

+0

Presumo che si tratti di Windows, quindi questo potrebbe aiutare: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v= vs.85% 29.aspx – kainaw

+0

Ottieni un cronometro e risolvilo da solo. È banalmente facile fare l'esperimento. –

risposta

4

Poiché the official documentation non specifica, è possibile solo supporre che il momento preciso durante l'avvio non sia realmente definito e che potrebbe funzionare in modo diverso su diverse versioni di Windows. Ma considera che con la virtualizzazione e l'emulazione "poiché il pulsante di accensione è stato premuto" sarebbe privo di significato. La migliore definizione coerente che si possa sperare sarebbe il momento in cui Windows inizia a servire interruzioni - il primo momento in cui l'orologio di sistema è disponibile.

0

GetTickCount() è destinata principalmente per misurare breve tempointervalli. Il punto zero di GTC è fondamentalmente indefinito.

Inoltre, da quello che ho visto, GTC corrisponde molto strettamente al valore di QueryPerformanceCounter() * 1000/QueryPerformanceFrequency(), quindi immagino sia implementato sulle macchine che supportano QPC e QPF.

Ora ci sono due opzioni comuni per determinare il tempo di attività di Windows.

  1. query il contatore \\.\System\System Up Time prestazioni. Attenti allo caveats on non-English boxes. Inoltre, in base ai miei test, questo metodo semplicemente non funziona sotto Wow64, con PdhCollectQueryData restituendo NO_DATA.

  2. Eseguire una query WMI per il valore LastBootUpTime da Win32_OperatingSystem table. Questo è pesante, quindi in genere si desidera ottenere e memorizzarlo nella cache. È anche fragile in quanto WMI può rompersi in modi misteriosi. Infine, ho visto l'utilità standard systeminfo basata sul tempo di avvio non valido di WMI, disattivato per più di 1 giorno.

Un'altra opzione è quella di utilizzare GetSystemTimes per ottenere folli volte/kernel/utente di tutte le CPU, li tally up, dividere per il numero di CPU e prendere che come approssimazione del tempo di attività. Avendo sperimentato questo, trovo che sia piuttosto impreciso e produca un tempo di funzionamento superiore al normale.

Quindi, tutto sommato, non esiste un modo semplice e leggero per determinare l'avvio o il tempo di attività su Windows. Niente di paragonabile a leggere /proc/uptime su * nix. Sorpresa sorpresa.

14

Non si dovrebbe considerare come il tempo "da" qualsiasi cosa. Usalo solo come una sorgente di clock relativa. In altre parole, chiama una volta il numero GetTickCount, poi fai qualcosa, quindi richiamalo di nuovo, quindi sottrai. Non utilizzare il valore assoluto del conteggio delle zecche.

L'ora di avvio precisa non è specificata e, in caso di build di debug di Windows, il "tempo di avvio" è impostato artificialmente su 49,7 giorni nel passato per esporre i bug di rollover del timer.

Problemi correlati