1

Windowsでは、QueryPerformanceCounterを呼び出して高解像度のデータポイントを取得できますが、このメソッド呼び出しは、BIOS、マルチコアCPU、および一部のAMDチップの問題の影響を受けます。timeBeginPeriodを呼び出して、Windowsのシステムクロック解像度を(標準の〜15msではなく)1msに下げることができます。つまり、timeGetTimeを呼び出すだけで、指定したクロック解像度で時間を取得できます。

それで!OSX / Linuxでは、どのC ++クロック解像度を期待する必要がありますか?Windowsと同様の1msの解像度を得ることができますか?私はリアルタイムメディアを使用しているので、このクロック解像度をできるだけ低くしたいのですが、カーネルでこの値を変更できますか(WindowsのtimeBeginPeriodのように)?これは高性能のアプリケーションなので、現在の時刻を高速な関数呼び出しにしたいと思います。そして、時計が一般的にずれているのか、それとも私が予想できる奇妙な問題を知りたいのです。

ありがとう!ブレット

4

2 に答える 2

8

C++11 を使用している場合はstd::chrono::high_resolution_clock、システムが提供するのと同じくらい高い解像度のクロックを提供するものを使用できます。ミリ秒の期間を取得するには、次のようにします

typedef std::chrono::high_resolution_clock my_clock;

my_clock::time_point start = my_clock::now();

// Do stuff

my_clock::time_point end = my_clock::now();

std::chrono::milliseconds ms_duration = 
    std::chrono::duration_cast<std::chrono::milliseconds>(end - start);

C++11 を使用していない場合、gettimeofday関数は OSX およびほとんどの Linux ディストリビューションで動作します。エポックからの時間を秒とマイクロ秒で示します。解像度は指定されていませんが、最新のシステムでは少なくともミリ秒の精度が得られるはずです。

于 2012-07-07T20:57:46.667 に答える
2

Davidの答えに加えて、C ++ 11を使用できない場合は、BoostのTimerクラスが役立ちます。

于 2012-07-07T21:29:09.760 に答える