Я портирую игру, которая изначально была написана для 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.