2017-02-28 108 views
0

我一直在尋找這個,但沒有找到解決方案的確切問題。在C++ std中,如何在運行時選擇計時器的持續時間

總之,有沒有一種方法來計算定義std :: chronos變量的持續時間?就拿下面的一段代碼:

auto timed = std::chrono::duration_cast<std::chrono::microseconds>(t1-t0).count(); 

我使用一個自定義Timer類測量代碼執行某些功能的持續時間。我想要做的是創建一個switch,通過它一個凸輪定義結果是否應該存儲爲microseconds,millisecondsseconds

在C++中實現這一點的方法是什麼?

+2

您可以隨時保存最高分辨率結果,並將其轉換當有人要求在較低的分辨率 –

回答

0

你可以做類似的事情(假設scstd::chrono)。正如你所看到的轉換是一個模板參數(編譯時間參數):

class Timer { 
    sc::time_point<sc::steady_clock> _start; 

    Timer() : _start(sc::steady_clock::now()) { 
    } 

    template <class Unit> 
    int getElapsed() { 
     return sc::duration_cast<Unit>(sc::steady_clock::now() - _start).count(); 
    } 
}; 

用法:

Timer t; 
... 
t.elapsed<sc::milliseconds>(); 

現在,如果你想要的單位在運行時一個簡單的開關,只是包裝你的模板函數到與此時,相應的投實例您Timer::getElapsed功能,和你做至少對於簡單的情況下的函數:

enum class UnitCount { ms, s }; 

int Timer::getElapsedInUnits(UnitCount c) { 
    switch (c) { 
     case UnitCount::ms: 
     return this->getElapsed<sc::milliseconds>(); 
     case UnitCount::s 
     ... 
    } 
} 
+1

謝謝,優雅的解決方案 –