Rodrigo Strauss :: Blog
Lendo e medindo o tempo em C e C++: GetTickCount
GetTickCount é uma função da api Win32, portanto disponível somente no Windows. Qualquer versão do Windows desde o Windows 95 disponibiliza essa função.
Características:
- Retorna a quantidade de milissegundos desde a inicialização do Windows, portanto, não pode ser usada para horário, somente para medição de tempo;
- Sua precisão é de no máximo 15ms. Ou seja, se você medir seguidamente o tempo com GetTickCount você nunca terá um intervalo entre 0 e 15 milisegundos;
- Só funciona no Windows;
- É a forma mais rápida de medir tempo no Windows, ou seja, a chamada desse função demora pouco em relação aos outros método. Esse valor é atualizado pelo timer do sistema, então, eu suponho, que ele seja somente uma leitura nas memória.
Código:
int main()
{
DWORD start = GetTickCount();
AlgumaCoisaQueDemoraBastante();
DWORD elapsed = GetTickCount - start;
cout << "AlgumaCoisaQueDemoraBastante levou " << elapsed << " milissegundos para rodar" << endl;
}
Eu já recebi algumas planilhas com números de medição de performance onde os intervalos nunca eram menores do que 15ms, e algumas vezes o código medido levada 0ms. Esse é o problema em usar um timer sem resolução suficiente para mensurar o tempo de um trecho de código. Você pode usar o GetTickCount para medir tempo, contanto que você saiba das limitações.
A maior vantagem do GetTickCount é ser uma função que, no Windows, leva o menor tempo para te retornar uma referência de tempo. Consequentemente, interfere bem menos no tempo que será medido.
Veja também: Lendo e medindo o tempo em C e C++: função time()
Referência: GetTickCount na MSDN
Em 01/08/2011 19:29, por Rodrigo Strauss





Essa função pega o número de tiques do sistema como um todo. Em um ambiente multithreading, multitasking e preemptivo como o Windows é, existe uma grande chance da medição ser alterada por "fatores externos" (uma gravação de cache no momento da execução do código, por exemplo).
Para obter o tempo exato que uma thread levou, inclusive com separação entre kernel mode x user mode, nada como perguntar para o próprio kernel (mas é essa a função dele, mesmo!).
A função GetThreadTimes retorna o tempo de início de uma thread, tempo de fim (se tiver sido finalizada) e os tempos que foram gastos em user e kernel mode.
A precisão é a mesma do kernel, que é de 100 nanosegundos.
[]s