我正在使用boost::timer::cpu_timer
计算算法的“用户处理时间”,如下所示:
boost::timer::cpu_timer timer;
boost::timer::nanosecond_type userTime = timer.elapsed().user;
我的问题是如何格式化 userTime
在HH::MM::SS.mmm
格式?我知道我可以自己编写代码,但我希望 Boost 能够提供一些实现此目的的方法。
我遇到了this example ,但它利用 boost::chrono::duration<Rep, Period>
,我不确定如何从 boost::timer::nanosecond_type
获取.
最佳答案
您需要将nanosecond_type
转换为duration
再转换为time_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
关于c++ - boost 定时器 24 小时格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16151257/