2013-08-21 13 views
7

Sto utilizzando lo steady_clock per il salvataggio del timestamp di alcuni messaggi. Per lo scopo di debug è utile avere il calendario (o qualcosa di simile).Conversione di steady_clock :: time_point in time_t

Per gli altri orologi c'è la funzione statica to_time_t, ma su GCC (MinGW 4.8.0) questa funzione non è presente.

Ora ho stampare qualcosa di simile:

Timestamp: 26735259098242 

Per timestamp ho bisogno di uno steady_clock quindi non posso usare system_clock o di altri.

Modifica La stampa precedente è data dalla time_since_epoch().count()

+0

Quale sarebbe il valore desiderato time_t' di un 'steady_clock :: now(). Time_since_epoch()' di '0.12 millisecondi'? Definisci la conversione e avrai la tua risposta. – Cubbi

+1

'(to | from) _time_t' è significativo solo per gli orologi di sistema. Un 'high_resolution_clock', ad esempio, potrebbe non essere in grado di supportare l'intervallo dell'intero' time_t'. – kennytm

+0

Sono trascorsi circa 7 ore e 42 minuti da quando è stato riavviato il computer? –

risposta

11

Supponendo che è necessario il costante comportamento per i calcoli interni, e non per la visualizzazione, ecco una funzione è possibile utilizzare per convertire in time_t per display.

using std::chrono::steady_clock; 
using std::chrono::system_clock; 

time_t steady_clock_to_time_t(steady_clock::time_point t) 
{ 
    return system_clock::to_time_t(system_clock::now() 
              + (t - steady_clock::now())) 
} 

Se avete bisogno di un comportamento costante per la registrazione, che ci si vuole ottenere uno (system_clock::now(), steady_clock::now()) coppia in fase di avvio e l'uso che per sempre dopo.

+0

La frequenza di system_clock potrebbe effettivamente deviare dalla frequenza di steady_clock, a causa degli allineamenti di clock di ntp ecc. Quindi, "e usarlo per sempre" potrebbe non essere una buona idea. O altrimenti qualcuno potrebbe semplicemente cambiare l'orologio manualmente. – sstn

+3

@sstn: le differenze di frequenza sono gestite dalle definizioni dell'operatore chrono. E devi usare solo una base, se vuoi un orologio costante. Incorporare aggiornamenti manuali o ntp rende un orologio instabile, potenzialmente anche monotono. –

+0

Se è necessario correlare i registri tra sistemi diversi, allora anche steady_clock_to_time_t è ciò che si desidera, in modo che il registro incorpori le rettifiche di tempo dopo l'avvio dell'applicazione. –

Problemi correlati