Ottieni tempo in millisecondi in C++
-
Usa il metodo
std::chrono::system_clock::now()
per ottenere il tempo in millisecondi in C++ -
Usa la funzione
gettimeofday()
per ottenere il tempo in millisecondi in C++ -
Usa la funzione
time()
per ottenere il tempo in millisecondi in C++
Questo articolo introdurrà più metodi C++ su come ottenere il tempo in millisecondi.
Usa il metodo std::chrono::system_clock::now()
per ottenere il tempo in millisecondi in C++
La classe std::chrono::system_clock
è l’interfaccia in C++ per ottenere l’orologio da parete in tempo reale dell’intero sistema. La maggior parte dei sistemi utilizza l’ora Unix, che è rappresentata come secondi trascorsi dalle 00:00:00 UTC del 1 gennaio 1970 (una data arbitraria), chiamata epoca Unix. Notare che i secondi intercalari vengono ignorati. Quindi l’ora Unix non è veramente una rappresentazione accurata dell’UTC.
In primo luogo, viene chiamato il metodo now()
per restituire il punto nel tempo corrente. Il prossimo metodo chiamato è time_since_epoch
per recuperare la quantità di tempo tra *this
e l’epoca dell’orologio, ma restituisce un oggetto di classe std::chrono::duration
. Questo oggetto dovrebbe chiamare il metodo count
per restituire il numero effettivo di tick e rappresentarlo in millisecondi. Il risultato viene lanciato usando duration_cast<milliseconds>
.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
using std::chrono::duration_cast;
using std::chrono::milliseconds;
using std::chrono::seconds;
using std::chrono::system_clock;
int main() {
auto millisec_since_epoch =
duration_cast<milliseconds>(system_clock::now().time_since_epoch())
.count();
auto sec_since_epoch =
duration_cast<seconds>(system_clock::now().time_since_epoch()).count();
cout << "seconds since epoch: " << sec_since_epoch << endl;
cout << "milliseconds since epoch: " << millisec_since_epoch << endl;
return EXIT_SUCCESS;
}
Produzione:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Usa la funzione gettimeofday()
per ottenere il tempo in millisecondi in C++
gettimeofday
è la funzione conforme a POSIX per recuperare l’orologio di sistema. Richiede un indirizzo dell’oggetto struct timeval
come primo argomento per memorizzare i valori temporali. I valori sono tv_sec
che rappresenta il numero di secondi e tv_usec
come microsecondi trascorsi dall’epoca di Unix. gettimeofday
restituisce int
valore 0 per successo e -1 per fallimento nel fornire servizi di gestione degli errori. Il secondo argomento della funzione è struct timezone
, ma poiché è stato deprezzato, dovresti semplicemente passare un nullptr
. Nota che dovresti includere l’intestazione <sys/time.h>
per la definizione della funzione.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
int main() {
struct timeval time_now {};
gettimeofday(&time_now, nullptr);
time_t msecs_time = (time_now.tv_sec * 1000) + (time_now.tv_usec / 1000);
cout << "seconds since epoch: " << time_now.tv_sec << endl;
cout << "milliseconds since epoch: " << msecs_time << endl << endl;
return EXIT_SUCCESS;
}
Produzione:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Usa la funzione time()
per ottenere il tempo in millisecondi in C++
Un altro metodo conforme a POSIX per recuperare l’ora di sistema in C++ è chiamare la funzione time
. time
accetta un argomento opzionale di tipo time_t*
, dove è memorizzato il valore dell’ora restituito. In alternativa, possiamo utilizzare il valore di ritorno della funzione da memorizzare nella variabile dichiarata separatamente. In quest’ultimo caso, puoi passare nullptr
come argomento. Si noti che questa chiamata non restituisce l’ora con la stessa precisione delle chiamate precedenti.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
int main() {
time_t now = time(nullptr);
time_t mnow = now * 1000;
cout << "seconds since epoch: " << now << endl;
cout << "milliseconds since epoch: " << mnow << endl << endl;
return EXIT_SUCCESS;
}
Produzione:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778000
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook