2015-02-08 74 views
2

我有应用程序,在那里我必须计算执行C++函数和ASM函数部分的时间。其实我有问题,我得到的时间很奇怪 - 0或大约15600. O经常出现。有时,执行后,时间看起来不错,而且值不同于0和〜15600。任何人都知道它为什么会发生?以及如何解决它? 对C++执行我的应用程序的计数时间片段:在C++/CLI中计算时间

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

看起来不错。除了转换为'std :: chrono :: microseconds'并将其命名为“毫秒”。你期望什么?它输出什么? – tofi9 2015-02-08 18:35:09

回答

2

你看到的有你的计时器的分辨率。显然,chrono::system_clock会在您的系统上每1/64秒或15,625微秒进行打勾。

既然你是在C++/CLI中,并有.Net库可用,我会切换到使用Stopwatch类。它通常具有比1/64秒更高的分辨率。

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;