Я переношу гру, яка спочатку була написана для Win32 API, на Linux (ну, перенесення порту OS X порту Win32 на Linux).
Я реалізував QueryPerformanceCounter
, давши uSeconds з моменту запуску процесу:
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;
}
Це в поєднанні з QueryPerformanceFrequency()
наданням постійної 1000000 як частоти добре працює на моїй машині , даючи мені 64-бітну змінну, яка міститься uSeconds
з моменту запуску програми.
Так це портативний? Я не хочу виявляти, що це працює інакше, якщо ядро було складено певним чином чи щось подібне. Мені добре, що він не є портативним для чогось іншого, крім Linux.