Estou portando um jogo, que foi originalmente escrito para a API Win32, para o Linux (bem, portando a porta OS X da porta Win32 para o Linux).
Eu implementei QueryPerformanceCounter
dando os uSeconds desde o início do processo:
BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount)
{
gettimeofday(¤tTimeVal, NULL);
performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec);
performanceCount->QuadPart *= (1000 * 1000);
performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec);
return true;
}
Isso, junto com QueryPerformanceFrequency()
dar um 1000000 constante como a frequência, funciona bem na minha máquina , dando-me uma variável de 64 bits que contém uSeconds
desde a inicialização do programa.
Então, isso é portátil? Não quero descobrir que funciona de maneira diferente se o kernel foi compilado de uma certa maneira ou algo parecido. Eu estou bem com ele não sendo portátil para algo diferente do Linux, no entanto.