#include <chrono>
auto start = std::chrono::high_resolution_clock::now();
auto end = std::chrono::high_resolution_clock::now();
auto cost = std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count();
新增高精度延时器
#include <chrono>
#include <thread>
class Timer
{
public:
Timer() {}
void tic()
{
this->_start = std::chrono::high_resolution_clock::now();
}
void toc()
{
this->_end = std::chrono::high_resolution_clock::now();
}
long t()
{
return std::chrono::duration_cast<std::chrono::milliseconds>(_end - _start).count();
}
void hr_sleep_for(uint32_t ms)
{
// 单位粒度越小,时间越准确,CPU资源占用相对升高
// 实测必须至少为微秒级,误差才会减小
// std::chrono::milliseconds MinSleepDuration(1); //毫秒
std::chrono::microseconds MinSleepDuration(100); //微秒
// std::chrono::nanoseconds MinSleepDuration(100); //纳秒
std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
while (std::chrono::duration<double>(std::chrono::high_resolution_clock::now() - start).count() * 1000 < ms)
{
std::this_thread::sleep_for(MinSleepDuration);
}
}
private:
std::chrono::time_point<std::chrono::high_resolution_clock> _start;
std::chrono::time_point<std::chrono::high_resolution_clock> _end;
};