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库介绍