我有app,我必须计算执行部分C ++函数和ASM函数的时间。实际上我有问题,我得到的时间很奇怪 - 0或大约15600.经常发生。有时,执行后,时间看起来很好,值不同于0和~15600。有谁知道它为什么会发生?以及如何解决它? 计算执行我的C ++应用程序的时间片段:
auto start = chrono::system_clock::now();
for (int i = 0; i < nThreads; i++)
xThread[i]->Start(i);
for (int i = 0; i < nThreads; i++)
xThread[i]->Join();
auto elapsed = chrono::system_clock::now() - start;
long long milliseconds = chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
cppTimer = milliseconds;
答案 0 :(得分:2)
您所看到的是计时器的分辨率。显然,chrono::system_clock
在您的系统上每1/64秒或15,625微秒滴答一次。
由于您使用的是C ++ / CLI并且可以使用.Net库,因此我将切换到使用Stopwatch
类。它通常具有比1/64秒更高的分辨率。
答案 1 :(得分:0)
对我来说很好看。除了转换为std::chrono::microseconds
并将其命名为milliseconds
。
我使用了几个月的片段是:
class benchmark {
private:
typedef std::chrono::high_resolution_clock clock;
typedef std::chrono::milliseconds milliseconds;
clock::time_point start;
public:
benchmark(bool startCounting = true) {
if(startCounting)
start = clock::now();
}
void reset() {
start = clock::now();
}
// in milliseconds
double elapsed() {
milliseconds ms = std::chrono::duration_cast<milliseconds>(clock::now() - start);
double elapsed_secs = ms.count() / 1000.0;
return elapsed_secs;
}
};
// usage
benchmark b;
...
cout << "took " << b.elapsed() << " ms" << endl;