计时器的使用

本文介绍了C++11中的chrono库,详细讲解了时间单位定义、计时器的使用,包括秒、分钟、毫秒和微秒的表示,以及Stopwatch类实现的计时功能。同时讨论了`std::chrono::duration_cast`用于单位转换和`std::this_thread::sleep_for`在多线程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++11日期和时间库:chrono 时间表示

  • chrono库使用介绍
#include <iostream>
#include <chrono>
int main()
{
	//chrono命名空间定义好的时间单位
	//.count()返回的时一个常量(constexpr)
	std::chrono::hours tTime_hour(1);  //1小时
	std::cout << "hour: " << tTime_hour.count() << std::endl;        
	std::chrono::minutes tTime_minute(32);  //32分钟
	std::cout << "minute: " << tTime_minute.count() << std::endl;
	std::chrono::seconds tTime_second(50);  //50秒
	std::cout << "second: " << tTime_second.count() << std::endl;
	std::chrono::milliseconds ms(3);    // 3ms  毫秒
	std::cout << "milliseconds: " << ms.count() << std::endl;
	std::chrono::microseconds micro_s = 2 * ms;   //6000微秒
	std::cout << "microseconds: " << micro_s.count() << std::endl;
	// 时间相减
	std::chrono::minutes t1(10);  //分钟
	std::chrono::seconds t2(64);  //秒
	std::chrono::seconds t3 = t1 - t2;  //单位默认转到更小的
	std::cout << "t3: " << t3.count() << std::endl;
	std::cout << typeid(t3).name() << std::endl;   // 查看变量的类型
	//
	std::chrono::minutes h1 = std::chrono::duration_cast<std::chrono::minutes>(t3);
	std::cout << "The minute is: " << h1.count() << std::endl;
	system("pause");
        return 0;
}

在这里插入图片描述
//std::chrono::duration_cast<>时间单位转换,秒转换为分钟,但只能转换为整数,直接舍弃小数,如:8.3,8.9转换后都为8

计时器

#include <iostream>
#include <chrono>
#include <thread> 

class Stopwatch 
{
public:
	void start()
	{
		m_startTime = std::chrono::high_resolution_clock::now();
	}

	void stop()
	{
		m_endTime = std::chrono::high_resolution_clock::now();
	}

	double elapsed_seconds() const  //s
	{
		return std::chrono::duration_cast<std::chrono::microseconds>
			(m_endTime - m_startTime).count() / 1000000.0;
	}
	double elapsed_microseconds() const  //ms
	{
		return std::chrono::duration_cast<std::chrono::microseconds>
			(m_endTime - m_startTime).count() / 1000.0;
	}

private:
	std::chrono::high_resolution_clock::time_point m_startTime;
	std::chrono::high_resolution_clock::time_point m_endTime;
};
int main()
{
	Stopwatch objStopwatch;
	objStopwatch.start();
	std::this_thread::sleep_for(std::chrono::seconds(3));   //3s
	//会受到系统调度的影响,所以实际的暂停时间可能会稍微长于或短于请求的3秒
	objStopwatch.stop();
	std::cout << "T seconds: " << objStopwatch.elapsed_seconds() << std::endl;
	std::cout << "T microseconds: " << objStopwatch.elapsed_microseconds() << std::endl;
}

std::this_thread::sleep_for 在#include < thread>
阻塞当前线程执行,至少经过指定的 sleep_duration。
此函数可能阻塞长于 sleep_duration,因为调度或资源争议延迟。
请注意,多线程管理操作可能会导致某些延迟。

boost库也存在此函数: boost::this_thread::sleep_for()
std::this_thread::sleep_for 是C++11标准对各个平台的睡眠函数的封装,Sleep()是平台相关的API,其他平台也可能叫Sleep(),用std::this_thread::sleep_for 可以提供代码移植性。C++程序员做到没有linux和windows之分时,就是C++语言走向标准化之时。

C++11——计时器
std::this_thread::sleep_for
C++11 处理时间和日期的处理,以及chrono库介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qzy0621

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值