Como conseguir tempo em milissegundos em C++
-
Utilize o
std::chrono::system_clock::now()
Método para obter tempo em milissegundos em C++ -
Utilize a função
gettimeofday()
para obter tempo em milissegundos em C++ -
Utilize a função
time()
para obter tempo em milissegundos em C++
Este artigo apresentará múltiplos métodos C++ sobre como obter tempo em milissegundos.
Utilize o std::chrono::system_clock::now()
Método para obter tempo em milissegundos em C++
A classe std::chrono::system_clock
é a interface em C++ para obter um relógio de parede em tempo real em todo o sistema. A maioria dos sistemas utiliza o tempo Unix, que é representado como segundos passados de 00:00:00 UTC em 1 de janeiro de 1970, chamado de época Unix. Note que os segundos bissextos são ignorados. Assim, o tempo Unix não é realmente uma representação exata do UTC.
Em primeiro lugar, o método now()
é chamado para retornar o ponto atual no tempo. O próximo método chamado é time_since_epoch
para recuperar a quantidade de tempo entre *this
e a época do relógio, mas ele retorna um objeto de classe std::chrono::duration
. Este objeto deve chamar o método count
para retornar o número real de ticks, e representá-lo como milissegundos. O resultado é obtido utilizando 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;
}
Resultado:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Utilize a função gettimeofday()
para obter tempo em milissegundos em C++
O gettimeofday
é a função compatível com o POSIX para recuperar o relógio do sistema. É necessário um endereço do objeto struct timeval
como o primeiro argumento para armazenar valores de tempo. Os valores são tv_sec
representando o número de segundos e tv_usec
como microssegundos passados desde a época do Unix. O gettimeofday
retorna o valor int
0 para o sucesso e -1 para a falha em fornecer facilidades de tratamento de erros. O segundo argumento da função é struct timezone
, mas como foi depreciado, você deveria apenas passar um nullptr
. Note que seria necessário incluir <sys/time.h>
cabeçalho para a definição da função.
#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;
}
Resultado:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Utilize a função time()
para obter tempo em milissegundos em C++
Outro método compatível com POSIX para recuperar o tempo do sistema em C++ é chamar a função time
. O time
leva um argumento opcional do tipo time_t*
, onde o valor do tempo retornado é armazenado. Alternativamente, pode-se utilizar o valor de retorno da função para armazenar na variável declarada separadamente. Neste último caso, você pode passar o nullptr
como o argumento. Observe que esta chamada não retorna o tempo com a mesma precisão das chamadas anteriores.
#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;
}
Resultado:
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