Estoy portando un juego, que fue escrito originalmente para la API Win32, a Linux (bueno, portando el puerto OS X del puerto Win32 a Linux).
Lo he implementado QueryPerformanceCounter
dando los uSeconds desde que se inició el proceso:
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;
}
Esto, junto con QueryPerformanceFrequency()
dar una constante de 1000000 como frecuencia, funciona bien en mi máquina , dándome una variable de 64 bits que contiene uSeconds
desde el inicio del programa.
Entonces, ¿ es esto portátil? No quiero descubrir que funciona de manera diferente si el kernel se compiló de cierta manera o algo así. Sin embargo, estoy de acuerdo con que no sea portátil a algo que no sea Linux.