Qual é a melhor maneira de calcular a diferença de tempo em C ++? Estou cronometrando a velocidade de execução de um programa, então estou interessado em milissegundos. Melhor ainda, segundos.milissegundos ..
A resposta aceita funciona, mas precisa incluir ctime ou time.h conforme observado nos comentários.
Respostas:
Veja a
std::clock()
função.Se você quiser calcular o tempo de execução para si mesmo (não para o usuário), é melhor fazer isso em tiques do relógio (não em segundos).
EDITAR:
arquivos de cabeçalho responsáveis -
<ctime>
ou<time.h>
fonte
clock()
retorna o tempo de CPU consumido pelo programa. Portanto, se o programa for executado em paralelo, o tempo retornado pela função seria o acumulado do tempo gasto em todas as CPUs, ao invés do tempo decorrido cplusplus.com/reference/ctime/clockse você estiver usando c ++ 11, aqui está um invólucro simples (veja esta essência ):
Ou para c ++ 03 em * nix:
Exemplo de uso:
fonte
Timer()
e a chamada paraelapsed()
if!std::chrono::high_resolution_clock::is_steady
- que é o caso no Linux!Eu consideraria seriamente o uso de Boost, particularmente boost :: posix_time :: ptime e boost :: posix_time :: time_duration (em http://www.boost.org/doc/libs/1_38_0/doc/html/date_time/posix_time .html ).
É multiplataforma, fácil de usar e, na minha experiência, oferece o mais alto nível de resolução de tempo que um sistema operacional oferece. Possivelmente também muito importante; ele fornece alguns operadores IO muito bons.
Para usá-lo para calcular a diferença na execução do programa (em microssegundos; provavelmente um exagero), seria algo como [navegador escrito, não testado]:
fonte
Eu adicionei esta resposta para esclarecer que a resposta aceita mostra o tempo de CPU, que pode não ser o tempo que você deseja. Porque de acordo com a referência , existem o tempo da CPU e o tempo do relógio de parede . O tempo do relógio de parede é o tempo que mostra o tempo real decorrido independentemente de quaisquer outras condições como CPU compartilhada por outros processos. Por exemplo, usei vários processadores para fazer uma determinada tarefa e o tempo de CPU era alto em 18s, onde na verdade demorava 2s no tempo real do relógio de parede.
Para saber o tempo real que você faz,
fonte
boost 1.46.0 e superior inclui a biblioteca Chrono :
fonte
std::chrono
namespace com quase o mesmo conteúdo.No Windows: use GetTickCount
fonte
Você também pode usar o clock_gettime . Este método pode ser usado para medir:
O código é o seguinte:
`
fonte
apenas no caso de você estar no Unix, você pode usar
time
para obter o tempo de execução:fonte
Apenas uma observação: se você está executando no Windows e realmente precisa de precisão, pode usar QueryPerformanceCounter . Dá-lhe tempo em (potencialmente) nano segundos.
fonte
Para mim, a maneira mais fácil é:
usando este código, você não precisa fazer o clássico
end - start
.Aproveite sua abordagem favorita.
fonte
Obtenha o tempo do sistema em milissegundos no início e novamente no final e subtraia.
Para obter o número de milissegundos desde 1970 em POSIX, você escreveria:
Para obter o número de milissegundos desde 1601 no Windows, você escreveria:
Se você quisesse normalizar a resposta do Windows para que ela também retornasse o número de milissegundos desde 1970, você teria que ajustar sua resposta em 11644473600000 milissegundos. Mas isso não é necessário se você só se preocupa com o tempo decorrido.
fonte
Se você estiver usando:
Em seguida, você precisará do seguinte para obter o tempo em segundos:
fonte
Isso parece funcionar bem para intel Mac 10.7:
fonte