2013-04-22 80 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

相关问题