std :: chrono和cout

NoS*_*tAl 31 c++ time c++11 c++-chrono

我有一个愚蠢的问题.我尝试切换到c ++ 11标头,其中一个是chrono.但我的问题是我无法控制时间操作的结果.例如:

auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();
Run Code Online (Sandbox Code Playgroud)

得到:

初始化‘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> >]’ ... /usr/include/c++/4.6/ostream的 参数1

cout<<(uint64_t)t.time_since_epoch();
Run Code Online (Sandbox Code Playgroud)

给出无效的演员

How*_*ant 38

正如其他人所说,您可以调用count()成员函数来获取内部计数.

我想补充说我正在尝试添加一个新标题:<chrono_io>到这个库.这里记录在案.<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';
}
Run Code Online (Sandbox Code Playgroud)

输出:

147901305796958 nanoseconds
Run Code Online (Sandbox Code Playgroud)

执行此操作的源代码是开源的,可在上面的链接中找到.它由两个标题组成:<ratio_io><chrono_io>,和1个来源:chrono_io.cpp.

此代码应视为实验性的.它不是标准的,几乎肯定不会标准化.事实上,LWG的初步评论表明,他们更希望默认输出是该软件所称的"简短形式".可以通过以下方式获得此替代输出:

std::cout << std::chrono::duration_fmt(std::chrono::symbol)
          << t.time_since_epoch() << '\n';
Run Code Online (Sandbox Code Playgroud)

并输出:

147901305796958 ns
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 23

快速谷歌搜索找到了这个页面:http://en.cppreference.com/w/cpp/chrono/duration,您可以在其中找到打印持续时间的示例.

编辑:它已移至http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

  • 请注意,链接的示例是不同的,因为它显示了now()的两次调用之间的差异,并且不涉及time_since_epoch()。实际上,time_since_epoch保留了未指定的实际时间(取决于您获取time_point的时钟)。因此,简而言之,如果没有有关历元的信息,那么您要打印的持续时间就毫无意义。 (2认同)

Yon*_*son 9

如果你想要以毫秒为单位的分辨率,你可以这样做:

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";
Run Code Online (Sandbox Code Playgroud)

不要忘记在包含的标题中添加:

#include <chrono> //timing
Run Code Online (Sandbox Code Playgroud)


Mic*_*ker 7

不确定你对这个演员的期望,也许你想要t.time_since_epoch().count()