2

What is the most accurate way to calculate the elapsed time in C++? I used clock() to calculate this, but I have a feeling this is wrong as I get 0 ms 90% of the time and 15 ms the rest of it which makes little sense to me.

Even if it is really small and very close to 0 ms, is there a more accurate method that will give me the exact the value rather than a rounded down 0 ms?

clock_t tic = clock();

/*
  main programme body
*/

clock_t toc = clock();
double time = (double)(toc-tic);
cout << "\nTime taken: " << (1000*(time/CLOCKS_PER_SEC)) << " (ms)";

Thanks

4

3 に答える 3

7

C++ 11では、私は使用します

#include <chrono>
auto t0 = std::chrono::high_resolution_clock::now();
...
auto t1 = std::chrono::high_resolution_clock::now();
auto dt = 1.e-9*std::chrono::duration_cast<std::chrono::nanoseconds>(t1-t0).count();

秒単位の経過時間。


QueryPerformanceCounter()2011 より前の C++ では、 Windows またはgettimeofday()Linux/OSX で使用できます。例 (これは実際には C++ ではなく C です):

timeval oldCount,newCount;
gettimeofday(&oldCount, NULL);
...
gettimeofday(&newCount, NULL);
double t = double(newCount.tv_sec -oldCount.tv_sec )
         + double(newCount.tv_usec-oldCount.tv_usec) * 1.e-6;

秒単位の経過時間。

于 2013-07-15T13:41:19.117 に答える
0

C++11 が利用可能な場合は、chronoライブラリを使用します。

また、さまざまなプラットフォームが高精度クロックへのアクセスを提供します。

たとえば、Linux ではclock_gettimeを使用します。Windows では、高性能カウンター apiを使用します。

例:

C++11:

auto start=high_resolution_clock::now();
...  // do stuff
auto diff=duration_cast<milliseconds>(high_resolution_clock::now()-start);
clog << diff.count() << "ms elapsed" << endl;
于 2013-07-15T13:45:41.340 に答える