Clock_gettime 関数は、現在時刻を返す POSIX 関数です。 Windows では利用できないため、POSIX システムから Windows にコードを移植する場合は、代替関数が必要です。
Windows での Clock_gettime の代替関数として考えられるものの 1 つは、GetSystemTimeAsFileTime 関数です。この関数は、現在の時刻を FILETIME 構造体として返します。 FILETIME 構造体は、1601 年 1 月 1 日からの 100 ナノ秒間隔の数を表す 64 ビットの整数です。
GetSystemTimeAsFileTime 関数を使用して Clock_gettime を置き換えるには、次のコードを使用できます。
<code class="c++">#include <windows.h> int clock_gettime(int X, struct timeval *tv) { FILETIME ft; GetSystemTimeAsFileTime(&ft); tv->tv_sec = ft.dwHighDateTime; tv->tv_usec = ft.dwLowDateTime / 10; return 0; }</code>
このコードは、tv 構造体の現在時刻を返します。 tv_sec フィールドには 1970 年 1 月 1 日からの秒数が含まれ、tv_usec フィールドには最後の 1 秒からのマイクロ秒数が含まれます。
Windows 上で Clock_gettime に代わる可能性のあるもう 1 つの関数は、QueryPerformanceCounter 関数です。この関数は、現在時刻を LARGE_INTEGER 構造体として返します。 LARGE_INTEGER 構造体は、コンピューターの起動以降の 100 ナノ秒間隔の数を表す 64 ビットの整数です。
QueryPerformanceCounter 関数を使用して Clock_gettime を置き換えるには、次のコードを使用できます。
<code class="c++">#include <windows.h> int clock_gettime(int X, struct timeval *tv) { LARGE_INTEGER ft; QueryPerformanceCounter(&ft); tv->tv_sec = ft.QuadPart / 10000000; tv->tv_usec = ft.QuadPart % 10000000 / 10; return 0; }</code>
このコードは、tv 構造体の現在時刻を返します。 tv_sec フィールドにはコンピュータが起動してからの秒数が含まれ、tv_usec フィールドには最後の 1 秒からのマイクロ秒数が含まれます。
以上がPOSIX 環境からコードを移植する場合、Windows システム上で ` Clock_gettime ` の機能を複製するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。