Ottieni tempo in millisecondi in C++

Jinku Hu 12 ottobre 2023
  1. Usa il metodo std::chrono::system_clock::now() per ottenere il tempo in millisecondi in C++
  2. Usa la funzione gettimeofday() per ottenere il tempo in millisecondi in C++
  3. Usa la funzione time() per ottenere il tempo in millisecondi in C++
Ottieni 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
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Articolo correlato - C++ Time