これは私の答えのコピーです:ナノ秒で時間を提供するC++タイマー関数
Linux(およびBSD)の場合、clock_gettime()を使用します。
#include <sys/time.h>
int main()
{
timespec ts;
// clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD
clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux
}
Windowsの場合、QueryPerformanceCounterを使用します。そしてここにQPCの詳細があります
一部のチップセットではQPCに既知の問題があるようです。そのため、これらのチップセットがないことを確認することをお勧めします。さらに、一部のデュアルコアAMDも問題を引き起こす可能性があります。sebbbiによる2番目の投稿を参照してください。彼は次のように述べています。
QueryPerformanceCounter()とQueryPerformanceFrequency()は少し優れた解像度を提供しますが、異なる問題があります。たとえば、Windows XPでは、問題を解決するためにAMDデュアルコアドライバパッケージを特別にインストールしない限り、すべてのAMD Athlon X2デュアルコアCPUはいずれかのコアのPCを「ランダムに」返します(PCは少し後方にジャンプすることがあります)。他のデュアル+コアCPUにも同様の問題があることに気づいていません(p4デュアル、p4 ht、core2デュアル、core2 quad、フェノムクワッド)。