在多线程运行过程中我们为了降低对CPU的使用率经常会使用Sleep(1)进行休眠,但是在实际测试过程中我们发现调用Sleep(1)后,操作系统再次调度到该线程实际耗时在16ms。经过查找资料发现:由于windows并非是一个实时操作系统,由于线程调度机制,所以它的时间精度不是很高。Sleep只能精确16ms。但是实际上可以通过下面方式可以将Sleep精度提升到1-2ms(注意仍然达不到1ms)
//使用timeBeginPeriod、timeEndPeriod所需要依赖的头文件和库
#include < Windows.h >
#include < MMSystem.h >
#pragma comment(lib, "winmm.lib")
timeBeginPeriod(1); //设置精度为1毫秒
::Sleep(1); //当前线程挂起一毫秒
timeEndPeriod(1); //结束精度设置
如果还想进一步提升sleep的精度可以使用Vs2013中的下列函数:
#include
#include
std::this_thread::sleep_for(std::chrono::nanoseconds(100));
经过测试发现运行10万条数据进行测试发现nanoseconds精度只能达到1.03ms左右(注意依旧达不到微妙级、纳秒级)
但是比使用timeBeginPeriod精度要高。