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

深入应用C++11之std::chrono(c++的时间库)

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

深入应用C++11之std::chrono(c++的时间库)

通过函数+注释来解释,chrono库的基本用法

#define _CRT_SECURE_NO_WARNINGS

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


void demo()
{
	std::time_t t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());  //now 返回类型 time_point(类)time_point 经过to_time_t 变成time_t类型(long long)
	std::cout << std::put_time(std::localtime(&t), "%Y-%m-%d %X") << std::endl;//localtime 返回结构体   put_time 返回也是结构体
}


void test1()
{
	demo();
	std::this_thread::sleep_for(std::chrono::seconds(3));//睡眠3秒
	demo();
	using namespace std::chrono; //重载了h min s ms us ns
	std::this_thread::sleep_for(3s);
	demo();
}


void test2()
{
	demo();
	std::chrono::seconds sec2(2);
	std::this_thread::sleep_for(sec2);

	demo();

	std::chrono::milliseconds ms4 = sec2 * 2;
	std::this_thread::sleep_for(ms4);
	demo();
	std::cout << sec2.count() << std::endl;
	std::cout << ms4.count() << std::endl; //按照自己的时钟周期打印

	std::chrono::duration> sec_0_5(1); //自定义时间
	auto sec3 = sec_0_5 * 6;
	std::this_thread::sleep_for(sec3);
	demo();
	std::cout << sec3.count() << std::endl; //按照自己的时钟周期打印
}



void test3()
{
	std::chrono::minutes min3(3);
	std::chrono::seconds sec3(3);
	//auto secdiff = min3 - sec3; 等价下面
	std::chrono::seconds secdiff = min3 - sec3;
	std::cout << secdiff.count() << std::endl;
}



void test4()
{
	using namespace std::chrono;
	typedef std::chrono::duration> day_type;
	time_point today = time_point_cast(system_clock::now());
	time_pointtoday_s = time_point_cast(system_clock::now());
	std::cout << today.time_since_epoch().count() << std::endl;
	long long int a = (long long int)today_s.time_since_epoch().count();
	std::cout << a << std::endl;

}


void test5()
{
	using namespace std::chrono;
	system_clock::time_point now = system_clock::now();
	std::time_t last = system_clock::to_time_t(now - 24h);
	std::ostringstream ostring;
	ostring << std::put_time(std::localtime(&last), "%F %T");  //put_time 可以用流来保存
	std::string str = ostring.str();
	std::cout << str << std::endl;
}


void test6()
{
	std::chrono::system_clock::time_point t1 = std::chrono::system_clock::now();
	
	
	std::this_thread::sleep_for(std::chrono::seconds(1));
	auto t2 = std::chrono::system_clock::now();
	std::cout << (t2 - t1).count() << std::endl;
	long long differ_ms = std::chrono::duration_cast(t2 - t1).count();
	std::cout << differ_ms << std::endl;

}


class Timer
{
public:
	Timer() :_begin(std::chrono::high_resolution_clock::now()) { }

	void reset() { this->_begin = std::chrono::high_resolution_clock::now(); }


	template 
	int64_t elapsed() const
	{
		return std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - this->_begin).count();
	}

	int64_t elapsed_ns() const
	{
		return elapsed();
	}
	int64_t elapsed_us() const
	{
		return elapsed();
	}
	int64_t elapsed_sec() const
	{
		return elapsed();
	}
	int64_t elapsed_min() const
	{
		return elapsed();
	}

	int64_t elapsed_hour() const
	{
		return elapsed();
	}

private:
	std::chrono::time_point _begin;

};


void test7()
{
	Timer t;
	std::this_thread::sleep_for(std::chrono::seconds(2));
	std::cout << t.elapsed() << std::endl;
	std::cout << t.elapsed_us() << "  " << t.elapsed_min() << "  " << t.elapsed_us() << std::endl;

}




int main()
{
	test7();
	return 0;
}

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

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

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