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