Windows Sleep函数休眠精度

项目场景:

在实际项目中,经常会使用Sleep函数进行休眠。


问题描述:

在开发过程中,想要使用Sleep(1)休眠1ms,但是发现调用Sleep(1)后,实际的休眠时间大于1ms。


原因分析:

这是因为Windows并非是一个实时操作系统,由于线程调度机制,所以它的时间精度不是很高。


解决方案:

可以通过下面的方式将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中的下列函数:

std::this_thread::sleep_for(std::chrono::nanoseconds(100));

经测试,发现nanoseconds()精度只能达到1.03ms左右(依旧达不到微秒级、纳秒级),但是比使用timeBeginPeriod()精度要高。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值