我有一个愚蠢的问题。我尝试切换到c ++ 11标头,其中一个是chrono。但我的问题是我无法控制时间操作的结果。例如:
auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();
给出:
初始化
‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char, _Traits = std::char_traits<char>, _Tp = std::chrono::duration<long int, std::ratio<1l, 1000000l> >]’
的参数1 ... /usr/include/c++/4.6/ostream
cout<<(uint64_t)t.time_since_epoch();
给出无效的演员
答案 0 :(得分:34)
正如其他人所说,您可以调用count()
成员函数来获取内部计数。
我想补充说我正在尝试向此库添加新标头:<chrono_io>
。记录here。 <chrono_io>
优于使用count()
的主要优点是编译时单元是为您打印的。这些信息当然可以手动获取,但是为您提供库更容易。
对我来说,你的榜样:
#include <iostream>
#include <chrono_io>
int main()
{
auto t = std::chrono::high_resolution_clock::now();
std::cout << t.time_since_epoch() << '\n';
}
输出:
147901305796958 nanoseconds
执行此操作的源代码是开源的,可在上面的链接中找到。它由两个标题组成:<ratio_io>
和<chrono_io>
,以及1个来源:chrono_io.cpp
。
此代码应视为实验性的。它不是标准的,几乎肯定不会标准化。事实上,LWG的初步评论表明,他们更希望默认输出是该软件所称的“简短形式”。可以通过以下方式获得此替代输出:
std::cout << std::chrono::duration_fmt(std::chrono::symbol)
<< t.time_since_epoch() << '\n';
输出:
147901305796958 ns
答案 1 :(得分:22)
快速谷歌搜索找到此页面:http://en.cppreference.com/w/cpp/chrono/duration,您可以在其中找到打印持续时间的示例。
编辑:它已移至http://en.cppreference.com/w/cpp/chrono/duration/duration_cast
答案 2 :(得分:8)
如果你想要以毫秒为单位的时间分辨率,你可以这样做:
auto t1 = std::chrono::high_resolution_clock::now();
//process to be timed
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << "process took: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()
<< " milliseconds\n";
不要忘记添加包含的标题:
#include <chrono> //timing
答案 3 :(得分:7)
不确定您对此演员的期望,也许您想要t.time_since_epoch().count()
?