Así que me encuentro portando un juego, que fue escrito originalmente para la API de Win32, a Linux (bueno, portando el puerto OS X del puerto Win32 a Linux). He implementado QueryPerformanceCounter
dando a los uSeconds ya que el proceso de puesta en marcha:¿Se garantiza gettimeofday() una resolución de microsegundos?
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()
dando una constante 1000000 como la frecuencia, funciona bien en mi máquina, dándome una variable de 64 bits que contiene uSeconds
desde el inicio del programa. ¿Entonces es 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 para algo que no sea Linux.
clock_gettime está presente solo en el último Linux. otro sistema solo tiene gettimeofday() –
@ vitaly.v.ch es POSIX así que no es solo Linux y 'newist'? incluso las distribuciones 'Enterprise' como Red Hat Enterprise Linux se basan en 2.6.18 que tiene clock_gettime por lo que no, no son muy nuevas.(La fecha de la página del manual en RHEL es 2004-marzo-12, por lo que ha estado disponible por un tiempo) a menos que esté hablando de ANTIGUO FREAKING de kernels antiguos ¿A qué se refiere WTF? – Spudd86
clock_gettime se incluyó en POSIX en 2001. Hasta ahora conozco clock_gettime() implementado en Linux 2.6 y qnx. pero Linux 2.4 se usa actualmente en muchos sistemas de producción. –