2015-02-08 75 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;