Windows への Clock_gettime の移植
Clock_gettime 関数は、ナノ秒の精度で現在時刻を取得する方法を提供する POSIX 標準関数です。ただし、Windows ではネイティブにサポートされていません。
Windows へのコードの移植
Clock_gettime を使用するコードを Windows に移植するには、Win32 を使用して置換関数を実装できます。 API。これを行う方法の例を次に示します。
<code class="C++">#include <Windows.h> // Returns the file time offset for Windows. LARGE_INTEGER getFILETIMEoffset() { SYSTEMTIME s; FILETIME f; LARGE_INTEGER t; s.wYear = 1970; s.wMonth = 1; s.wDay = 1; s.wHour = 0; s.wMinute = 0; s.wSecond = 0; s.wMilliseconds = 0; SystemTimeToFileTime(&s, &f); t.QuadPart = f.dwHighDateTime; t.QuadPart <<= 32; t.QuadPart |= f.dwLowDateTime; return (t); } // Replacement for clock_gettime function. int clock_gettime(int X, struct timeval *tv) { LARGE_INTEGER t; FILETIME f; double microseconds; static LARGE_INTEGER offset; static double frequencyToMicroseconds; static int initialized = 0; static BOOL usePerformanceCounter = 0; if (!initialized) { LARGE_INTEGER performanceFrequency; initialized = 1; usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency); if (usePerformanceCounter) { QueryPerformanceCounter(&offset); frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.; } else { offset = getFILETIMEoffset(); frequencyToMicroseconds = 10.; } } if (usePerformanceCounter) QueryPerformanceCounter(&t); else { GetSystemTimeAsFileTime(&f); t.QuadPart = f.dwHighDateTime; t.QuadPart <<= 32; t.QuadPart |= f.dwLowDateTime; } t.QuadPart -= offset.QuadPart; microseconds = (double)t.QuadPart / frequencyToMicroseconds; t.QuadPart = microseconds; tv->tv_sec = t.QuadPart / 1000000; tv->tv_usec = t.QuadPart % 1000000; return (0); }</code>
置換関数を実装したら、それをコード内で使用して、ナノ秒の精度で現在時刻を取得できます。異なるプラットフォームでの Clock_gettime の動作の違いを考慮して、コードに追加の変更を加える必要がある場合があることに注意してください。
以上がネイティブの Clock_gettime サポートを使用せずに Windows でナノ秒精度のタイミングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。