C++中的计时

Chrono库用于处理日期和时间。该库旨在处理不同系统上的计时器和时钟可能不同的事实,从而随着时间的推移提高精度。chrono的独特之处在于它提供了 通过将持续时间和时间点(“时间点”)与特定时钟分离,实现精度中性概念。

null

chrono是头的名称,也是子名称空间的名称:这个头中的所有元素(除了常见的_类型专门化)都不是直接在std名称空间(像大多数标准库一样)下定义的,而是在 std::chrono名称空间 . 此标题中的元素处理时间。这主要通过三个概念来实现:

期间

duration对象通过一分钟、两小时或十毫秒等计数来表示时间跨度。例如,“42秒”可以用一个持续时间来表示,该持续时间由1秒时间单位的42个滴答声组成。

// C++ program to illustrate the utility
// function duration::count
#include <iostream>
#include <chrono>
int main ()
{
using namespace std::chrono;
// std::chrono::milliseconds is an
// instantiation of std::chrono::duration:- 1 second
milliseconds mil(1000);
mil = mil*60;
std::cout << "duration (in periods): " ;
std::cout << mil.count() << " milliseconds." ;
std::cout << "duration (in seconds): " ;
std::cout << (mil.count() * milliseconds::period::num /
milliseconds::period::den);
std::cout << " seconds." ;
return 0;
}


输出:

duration (in periods): 60000 milliseconds.
duration (in seconds): 60 seconds.

时钟

时钟由起点(或纪元)和滴答声频率组成。例如,一个时钟的纪元可能是1996年2月22日,并且每秒都在滴答作响。C++定义了三种时钟类型:

  • 系统时钟 -它是根据系统的当前时间(我们在计算机工具栏上看到的常规时钟)。它写为-std::chrono::system_clock
  • 稳定时钟 -这是一个永远不会调整的单调时钟。它以统一的速率运行。它写为-std::chrono::staid_clock
  • 高分辨率时钟 –它提供了尽可能小的滴答周期。它写为std::chrono::高分辨率时钟

时点

time_point对象表示相对于时钟历元的时间点。在内部,对象存储持续时间类型的对象,并使用时钟类型作为其历元的参考。

// C++ program to illustrate time point
// and system clock functions
#include <iostream>
#include <chrono>
#include <ctime>
// Function to calculate
// Fibonacci series
long fibonacci(unsigned n)
{
if (n < 2) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
int main()
{
// Using time point and system_clock
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
std::cout << "f(42) = " << fibonacci(42) << '' ;
end = std::chrono::system_clock::now();
std::chrono::duration< double > elapsed_seconds = end - start;
std:: time_t end_time = std::chrono::system_clock::to_time_t(end);
std::cout << "finished computation at " << std:: ctime (&end_time)
<< "elapsed time: " << elapsed_seconds.count() << "s" ;
}


输出:

f(42) = 267914296
finished computation at Wed Jan  4 05:13:48 2017
elapsed time: 2.14538s

本文由 沙姆巴维·辛格 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享