Come funziona il tempo interno _ftime / Windows?
Domanda
Ho riscontrato un problema interessante in Windows che mi permette di far funzionare velocemente l'orologio di Windows (ma non gli orologi hardware) - fino a 8 secondi al minuto. Sto facendo alcune ricerche di base per capire come Windows calcola e aggiorna il suo tempo interno (non come si sincronizza con un server NTP). Qualsiasi informazione che qualcuno ha o qualsiasi documento tu possa indicarmi sarebbe molto apprezzato!
Inoltre, se qualcuno sa come funziona _ftime, per favore fatemelo sapere.
Soluzione
Questo articolo di MSDN offre breve descrizione di come viene gestita l'ora di sistema: " Quando il sistema si avvia per la prima volta, imposta l'ora di sistema su un valore basato sull'orologio in tempo reale del computer e quindi aggiorna regolarmente l'ora. " ; Un'altra funzione interessante è GetSystemTimeAdjustment , che ha questo da dire:
Un valore di TRUE [per lpTimeAdjustmentDisabled] indica che la regolazione periodica del tempo è disabilitata. Ad ogni interruzione dell'orologio, il sistema aggiunge semplicemente l'intervallo tra gli interrupt dell'orologio all'ora del giorno. Il sistema è libero, tuttavia, di regolare l'orologio del giorno usando altre tecniche. Tali altre tecniche possono far sì che l'orologio dell'ora del giorno salti notevolmente quando vengono apportate modifiche.
Infine, per quanto riguarda _ftime, sembra essere implementato usando GetSystemTimeAsFileTime . Quindi si avvolgerebbe direttamente sulle stesse strutture temporali integrate che verrebbero utilizzate ovunque.
Altri suggerimenti
Per quanto riguarda il modo in cui _ftime()
funziona:
Se hai installato Microsoft Visual C ++, probabilmente hai installato anche l'origine runtime C. %ProgramFiles%\Microsoft Visual Studio <version>\VC\crt\src\ftime.c
è definito in ftime64.c
e <=>.
_ftime non utilizza affatto GetSystemTimeAsFileTime. Basta leggere il codice sorgente.