std::this_thread::sleep_for 的设计缺陷在于,依赖系统时间,系统时间修改后,就不准确了
#include <stdio.h>
#include <thread>
#include <chrono>
void SleepMs(int32_t nMs)
{
#ifdef WIN32
Sleep(nMs);
#else
(void)usleep(nMs * 1000);
#endif
}
int main()
{
for (int i = 0; i < 10000; i++)
{
std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
int64_t duration = std::chrono::duration_cast<std::chrono::milliseconds>(t1.time_since_epoch()).count(); // 获取打点时间,和系统无关,系统时间调整不会引起跳变
printf("duration %d :%lld \n", i, duration);
#if 0
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 在windows 下,如果系统时间往前调,会卡住,和系统时间有关系,测试可用,项目最好不用
#else
SleepMs(1000);
#endif
}
}