📜  C++中的Chrono

📅  最后修改于: 2021-05-30 14:34:41             🧑  作者: Mango

计时库用于处理日期和时间。该库旨在处理以下事实:计时器和时钟在不同的系统上可能会有所不同,因此会随着时间的推移在精度方面进行改进。 chrono的独特之处在于,它通过将持续时间和时间点(“ timepoint”)与特定时钟分开来提供了一种精确中立的概念。

chrono是标题的名称,也是子命名空间的名称:该标题中的所有元素(common_type特殊化除外)不是直接在std名称空间下定义(像大多数标准库一样),而是在std ::下定义: chrono名称空间
此标头中的元素处理时间。这主要通过三个概念来完成:

期间

持续时间对象通过分钟,两小时或十毫秒之类的时间表示时间跨度。例如,“ 42秒”可以用1秒时间单位的42个滴答声表示的持续时间来表示。

// C++ program to illustrate the utility 
// function duration::count
#include  
#include     
  
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.\n";
      
    std::cout << "duration (in seconds): ";
    std::cout << (mil.count() * milliseconds::period::num / 
                               milliseconds::period::den);
    std::cout << " seconds.\n";
  
    return 0;
}

输出:

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

时钟由起点(或纪元)和滴答度组成。例如,一个时钟可能具有一个1996年2月22日的纪元,并且每秒钟计时。 C++定义了三种时钟类型:

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

时间点

time_point对象表示相对于时钟纪元的时间点。在内部,对象存储一个持续时间类型的对象,并将Clock类型用作其纪元的引用。

// C++ program to illustrate time point
// and system clock functions
#include 
#include 
#include 
  
// 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 start, end;
  
    start = std::chrono::system_clock::now();
    std::cout << "f(42) = " << fibonacci(42) << '\n';
    end = std::chrono::system_clock::now();
  
    std::chrono::duration 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\n";
}

输出:

f(42) = 267914296
finished computation at Wed Jan  4 05:13:48 2017
elapsed time: 2.14538s
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”