2013-04-22 76 views
2

我使用boost::timer::cpu_timer來計算「用戶進程時間」的算法,像這樣:升壓定時器24小時格式

boost::timer::cpu_timer timer; 

boost::timer::nanosecond_type userTime = timer.elapsed().user; 

我的問題是我怎麼在HH::MM::SS.mmm格式來格式化userTime?我知道我可以自己編寫代碼,但我期待着Boost提供一些這樣做的手段。

我碰到this example,但它使用boost::chrono::duration<Rep, Period>,我不知道如何從boost::timer::nanosecond_type獲得。

回答

2

您需要轉換nanosecond_typedurationtime_point

#include <iostream> 
#include <boost/timer/timer.hpp> 
#include <boost/chrono.hpp> 
#include <boost/format.hpp> 

namespace chrono = boost::chrono; 

int main() 
{ 
    // get now time & start timer 
    chrono::system_clock::time_point start_time = chrono::system_clock::now(); 
    boost::timer::cpu_timer timer; 

    for (int i = 0; i < 100000; ++i) {} 

    // elapsed time conversion to time_point 
    chrono::system_clock::time_point end_time 
     = chrono::time_point_cast<chrono::system_clock::duration>(
       start_time + chrono::nanoseconds(timer.elapsed().user)); 

    // time_point conversion to time_t&tm 
    std::time_t time = chrono::system_clock::to_time_t(end_time); 
    std::tm* t = std::localtime(&time); 

    // formatting 
    std::size_t fractional_seconds = chrono::duration_cast<chrono::milliseconds>(
             end_time.time_since_epoch() 
            ).count() % 1000; 
    std::string s = (boost::format("%d:%d:%d.%d") 
         % t->tm_hour 
         % t->tm_min 
         % t->tm_sec 
         % fractional_seconds 
        ).str(); 
    std::cout << s << std::endl; 
} 

可能的輸出:

10:42:55.445 
+0

謝謝你的努力,但也許別人有一個清晰的解決方案。爲了格式化時間而進行如此多的轉換看起來過分(儘管這允許靈活的格式化)。我發現真的很奇怪,'boost :: chrono'中沒有持續時間格式... – 2013-04-23 09:49:41

+1

現在版本boost :: chrono是時間效用(不是日期時間庫)。所以,時辰/日期現在正在發展。 https://svn.boost.org/svn/boost/sandbox/chrono_date/libs/date/doc/date.html我相信未來的版本更有用。 – 2013-04-23 10:33:13

+0

我明白了。謝謝。 – 2013-04-23 11:27:45

相關問題