在我的线程中(使用boost :: thread)我需要以ms或更少的时间检索当前时间并转换为ms:
实际上,在这里阅读我发现了这个:
tick = boost::posix_time::second_clock::local_time();
now = boost::posix_time::second_clock::local_time();
似乎工作,但我需要有一个很长的毫秒的现在…
我该怎么做?
解决方法:
您可以使用boost :: posix_time :: time_duration来获取时间范围.就像这样
boost::posix_time::time_duration diff = tick - now;
diff.total_milliseconds();
要获得更高的分辨率,您可以更改正在使用的时钟.例如,对于boost :: posix_time :: microsec_clock,虽然这可能取决于操作系统.例如,在Windows上,boost :: posix_time :: microsecond_clock具有毫秒分辨率,而不是微秒.
一个稍微依赖于硬件的例子.
int main(int argc, char* argv[])
{
boost::posix_time::ptime t1 = boost::posix_time::second_clock::local_time();
boost::this_thread::sleep(boost::posix_time::millisec(500));
boost::posix_time::ptime t2 = boost::posix_time::second_clock::local_time();
boost::posix_time::time_duration diff = t2 - t1;
std::cout << diff.total_milliseconds() << std::endl;
boost::posix_time::ptime mst1 = boost::posix_time::microsec_clock::local_time();
boost::this_thread::sleep(boost::posix_time::millisec(500));
boost::posix_time::ptime mst2 = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration msdiff = mst2 - mst1;
std::cout << msdiff.total_milliseconds() << std::endl;
return 0;
}
在我的win7机器上.第一个输出是0或1000.第二个分辨率.
第二个几乎总是500,因为时钟的分辨率更高.我希望帮助一点.