私はもともとWin32 API用に作成されたゲームをLinuxに移植しています(Win32ポートのOS Xポートを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 を与えることと相まって、私のマシンでうまく機能しuSeconds
、プログラムの起動以降に含まれる64ビット変数を与えます。
これはポータブルですか?カーネルが特定の方法でコンパイルされた場合など、カーネルの動作が異なることを発見したくありません。ただし、Linux以外には移植できなくても問題ありません。