• window sleep函数


    转载( 自 夏至千秋

    一、问题产生

    在C#和C++中有这样一个函数:void Sleep(int Timeout),可以让线程暂停指定的毫秒数。 但是我在win8下调用这个函数实现按照固定频率发送udp数据包时,会有一个问题。当Timeout<15ms左右是时,无论怎么减小Timeout,一秒钟发送的数据包和Timeout=15的时候基本上差不多,除非Timeout=0。【/(ㄒoㄒ)/~~】于是,我就开始考虑是不是millisecondsTimeout有个最小精度。

    二、调查结果总结

    windows不是实时系统,15ms左右会轮询一次,检查线程执行。这带该就是造成那个millisecondsTimeout精度为15ms的原因吧。

    window不同的操作系统平台sleep的时长是有区别的,win7 sleep(1)1ms,  win10 sleep(1) 14~15ms.

    三、解决方法

    方法有两种

    ①.多媒体定时器

    timeBeginPeriod(1); //设置精度为1毫秒
    ::Sleep(1);         //当前线程挂起一毫秒
    timeEndPeriod(1);   //结束精度设置

    这样可以将Sleep精度提升到1ms多一点(注意仍然达不到1ms)。
    在C#下可以使用这个:《C#多媒体定时器使用方法》http://blog.csdn.net/jane_sl/article/details/8019935
    关于更多的多媒体定时器:http://www.cnblogs.com/liuhao2638/archive/2013/06/13/3134109.html
    只定制Sleep这个函数《如何用C#做高精度计时器》http://blog.csdn.net/cloudhsu/article/details/5773043

    ②.使用C++11新特性

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

    据说经过测试发现运行10万条数据进行测试发现nanoseconds精度只能达到1.03ms左右(注意依旧达不到微妙级、纳秒级) 但是比使用timeBeginPeriod精度要高。我没有测试这个

  • 相关阅读:
    如何判断touch到子视图或离开视图
    NSString属性声明中的copy和retain区别
    iOS创建PDF文件
    NSString的内存分配及管理
    清除新微博Cookie
    Object System (对象系统)
    基于组件的游戏编程
    继电器srd05vdcslc
    JavaScript专题(二):深入理解iframe
    Eclipse插件安装maven svn ibatis openExplorer PropertiesEditor
  • 原文地址:https://www.cnblogs.com/8335IT/p/12370846.html
Copyright © 2020-2023  润新知