关于boost::this_thread::sleep_for(std::chrono::milliseconds(1))精度的问题

eakey 2019-11-28 10:59:35
循环读取一个外部硬件设备寄存器(单次读取操作在0.05毫秒左右),要求在50~60毫秒的时间内监测数据是否发生变化。
代码如下,这样在win10总共运行的时间一般在50~60毫秒,但在win7上运行经常总时间会达到100~160毫秒,通过在win7打印日志发现boost::this_thread::sleep_for(std::chrono::milliseconds(1))大部份产生的延时时间为0.8~1.8毫秒,但有少数达到了30~33毫秒,怎么才能得到精确的延时?
boost::this_thread::sleep_for(std::chrono::milliseconds(1))这样的语句我觉得在0.5~2毫秒之间都是可以接受的,但有时来一下几十毫秒影响的程序的后续处理。


std::chrono::steady_clock::time_point varTimerStart, varTimerEnd;
std::chrono::duration<double> varTimerElapsed;

for (int i = 0; i < 50; i++) {
varTimerStart = std::chrono::steady_clock::now();

boost::this_thread::sleep_for(boost::chrono::milliseconds(1));

varTimerEnd = std::chrono::steady_clock::now();

varTimerElapsed = std::chrono::duration_cast<chrono::duration<double>>(varTimerEnd - varTimerStart);
cout << to_string(varTimerElapsed.count()) << endl;

//然后读取一个外部硬件设备寄存器(一次读取操作一般在0.2毫秒左右的时间)
}

system("Pause");
...全文
1532 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2019-11-28
  • 打赏
  • 举报
回复
windows不是实时操作系统,不要对这个期望太高。 要么换高精度定时器

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧