0

私はWindows からGetTickCount()を使用していますが、パフォーマンスや解像度が低いことを読みました。時間を取得するための最良の方法は何ですか。

<ctime>ライブラリを使用してみましたが、ミリ秒またはマイクロ秒には対応していません。その精度までのものが必要です。

ありがとう!

4

3 に答える 3

7

C++11 を使用している場合は、std::chrono::high_resolution_clock

精度は実装の詳細です。たとえば、QueryPerformanceCounterWindows のように実装する必要があります。

#include <chrono>
#include <iostream>

int main(int argc, char *argv[])
{
   auto t1 = std::chrono::high_resolution_clock::now();
   auto t2 = std::chrono::high_resolution_clock::now();
   std::cout << "It took " << std::chrono::nanoseconds(t2 - t1).count() << " nanoseconds" << std::endl;

   return 0;
}
于 2013-07-20T20:16:43.600 に答える
1

クロスプラットフォームの互換性が必要な場合は、 ( docsclock()を参照) の関数がおそらく最善の策です。Visual Studio ではミリ秒単位であり (ただし、実際に 1 ミリ秒単位で進むという保証はありません)、おそらく他のコンパイラでも同様です。ctime

各プラットフォームには、より高解像度のタイミングを取得する独自の方法があります。Windows にはtimeGetTime()とがありQueryPerformanceCounter()ます。それらについてはオンラインで読むことができます。それぞれについてたくさんの記事があります (ここに 1 つ)。気になるプラットフォームが他にもある場合は、Google で検索するか、独自の高解像度タイミング関数についてドキュメントを参照する必要があります。

于 2013-07-20T19:56:26.143 に答える