栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11中时间库chrono的使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11中时间库chrono的使用

chrono的使用
  • 三个时钟的区别:
  • 举例说明:

  C++11为我们提供了三种时钟类型:system_clock、steady_clock、high_resolution_clock。这三个时间类都提供了rep(周期)、period(单位比率)、duration(成员类型)。这三个时钟类都提供了一个静态成员函数 now() 用于获取当前时间,该函数的返回值是一个 time_point 类型。

注意: 虽然这三个时钟都很多相同的成员类型和成员函数,但它们是没有亲缘关系的。这三个时钟类型都是类,并非模板类。

三个时钟的区别:
  1. system_clock:类似Windows系统右下角那个时钟,是系统时间。明显这个时钟是可以自己设置的。system_clock除了now()函数外,还提供了to_time_t()静态成员函数。用于将系统时间转换成熟悉的std::time_t类型,得到了std::time_t类型的值,就可以很方便地打印当前时间了。
  2. steady_clock:是单调的时钟,相当于教练手中的秒表;只会增长,适合用于记录程序耗时,他表示时钟是不能设置的。
  3. high_resolution_clock:是当前系统能够提供的最高精度的时钟;它也是不可以修改的。相当于 steady_clock 的高精度版本。
举例说明:
  1. system_clock案例:输出当前时间
#include 
#include    //表示时间单位的库
#include 
#include
using namespace std;
using namespace std::chrono;

int main() {

    auto tp = system_clock::now(); //获取系统当前时间点
    time_t cur_time = system_clock::to_time_t(tp);  //将时间转换为ctime的time_t格式

    char stime[30];
    errno_t err = ctime_s(stime, sizeof(stime), &cur_time);  //转换为字符串

    //cout << err << std::endl;
    cout << stime << std::endl;

    return 0;
}

结果:


注意:不要将steady_clock、high_resolution_clock时钟的now()返回值作为to_time_t的参数,这会导致编译通不过。因为类型不匹配。

  1. steady_clock例子
#include 
#include    //表示时间单位的库
#include 
#include
#include 

using namespace std;
using namespace std::chrono;

int main() {

    auto begin = steady_clock::now();  //获取系统启动后到现在的时间点
    for (int i = 0; i < 10; ++i)
    {
        std::this_thread::sleep_for(seconds(1));
        std::cout << i << std::endl;
    }
    auto end = steady_clock::now();
    auto diff = (end - begin).count(); //返回时间差--【单位:纳秒】
    cout << "diff=" << diff << std::endl;
    return 0;

}

结果:

3. high_resolution_clock例子:打印一百个*号需要的时间

// high_resolution_clock example
#include 
#include 
#include 
#include 
using namespace std;
using namespace std::chrono;

int main()
{
	high_resolution_clock::time_point t1 = high_resolution_clock::now();
	cout << "printing out 100 stars...n";
	for (int i = 0; i < 100; ++i) {
		if (i % 10 == 0)cout << endl;
		cout << "*";
	}
	cout << endl; cout << endl;
	high_resolution_clock::time_point t2 = high_resolution_clock::now();
	cout << "in seconds time:";
	duration> duration_s(t2 - t1);
	cout << duration_s.count() << " seconds" << endl;
	cout << "in millisecond time:";

	//duration> duration_ms(t2-t1);
	duration> duration_ms = duration_cast>>(t2 - t1);
	cout << duration_ms.count() << " milliseconds" << endl;
	cout << "in microsecond time:";

	//duration> duration_ms(t2-t1);
	duration> duration_mcs = duration_cast>>(t2 - t1);
	cout << duration_mcs.count() << " microseconds" << endl;
	duration time_span = duration_cast>(t2 - t1);
	cout << "It took me " << time_span.count() << " seconds.";
	cout << std::endl;

	return 0;
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号