Sleep精度

 在多线程运行过程中我们为了降低对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精度要高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值