一、问题产生

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

二、调查结果总结

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

三、解决方法

方法有两种

①.多媒体定时器

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

这样可以将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());

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

当Thread.Sleep的暂停时间参数设置过小时,精度很差的解决方法的更多相关文章

  1. win10提示“无法设置移动热点 请打开WLAN”的解决方法

    一位用户在使用Win10创意者操作系统过程中,遇到了无法开启移动热点的情况,开关呈灰色状态,而且提示:无法设置移动热点 请打开WLAN,该如何解决呢?该用户表示Wlan一直开着呀,感觉非常奇怪.接下来 ...

  2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法

    http://hi.baidu.com/619195553dream/blog/item/be9f12adc1b5a3e71f17a2e9.html问题描述Exception in thread &q ...

  3. 优化MySQL开启skip-name-resolve参数时显示“ignored in --skip-name-resolve mode.”Warning解决方法

    转自:http://blog.csdn.net/yiluoak_47/article/details/53381282 参数用途: skip-name-resolve #禁止MySQL对外部连接进行D ...

  4. 转 VS2010 RDLC 横向合并时“未正确设置 tablix“Tablix1”的 FixedData 属性”错误解决方法 .

    最近在使用Rdlc做报表打印,有些报表的表头需要合并表头.Rdlc本身提供了横向合并的工具,但是在实际合并的时候,会出现“未正确设置 tablix“Tablix1”的 FixedData 属性.除非在 ...

  5. 给子元素设置margin-top无效果的一种解决方法

    在写一个登陆界面的时候,设置登录按钮的margin-top时出了问题 先是这么写的 <div style="margin-top:30px"> <a style= ...

  6. js中setTimeout()时间参数设置为0的探讨

    起因源于一道前端笔试题: var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); co ...

  7. HTTP请求时间参数设置

    1. JSON 2019-01-18 18:36:35 2. Postman 2019/01/18 18:36:35

  8. EnyimMemcached中用DateTime参数设置过期后赋值有问题的解决.

    环境: win10 64位.memcached 1.4.4 64位.EnyimMemcached 2.16.0(ps:2.13.0也有此问题,别的版本就没试了). EnyimMemcached git ...

  9. [前端_EasyUI]给easyui的datebox设置默认值,获取不到 的解决方法

    //给eayui datebox设置初始值 $("#ctime").datebox("setValue", function(){ var date = new ...

随机推荐

  1. 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

    这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...

  2. 协作图 Collaboration diagram

    概述 协作图也是一种交互图,但一般用的比较少,一般用在大概分析一下对象之间是怎样交互的,跟顺序图是可以相互转化的. 协作图的用处: 在分析的时候(而顺序图一般设计的时候),分析出有哪些对象: 在白板上 ...

  3. TL(简单)

    TL time limit per test 2 seconds memory limit per test 256 megabytes input standard input output sta ...

  4. C# 通过WebService方式 IIS发布网站 上传文件到服务器

    应用场景:要将本地的文件 上传到服务器的虚拟机上 网络环境:公司局域网(如下图中第二种) 开发环境:VS2010 服务器环境:WinServer2008    虚拟机环境:WinServer2008 ...

  5. oracle/sqlserver 递归

    1.Oracle递归查询 2.SqlServer递归查询 with cte as ( select t.id,t.name,t.parentId from dbo.Department t where ...

  6. [引用]SQLServer占CPU100%

    程序猿是如何解决SQLServer占CPU100%的   文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 ...

  7. Entity Framework访问MySQL数据库的存储过程并获取返回值

      一.创建MySql存储过程 1, CREATE PROCEDURE `InsertAlarmInfo`(in businessindex int, in providerindex int, in ...

  8. [Ubuntu] bash: warning: setlocale: LC_ALL: cannot change locale

    问题症状 -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8) 解决方法 本地化是指不同地区用户在键盘上输入不同语言 ...

  9. Hibernate基础映射

    在说Hibernate映射前,我们先来了解下对象关系映射 ORM.ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现.这样开发人员就可以把对数据库的操作转化为对这些对象的操作.我们 ...

  10. Unity 3D 中实现对物体 位置(position) 旋转(rotation) 大小(scale) 的全面控制

    今天分享一些基础控制的脚本 1.位置(Position): 控制位置很简单,首先要知道要在xyz哪几个轴上移动,确定好后定义代表着那些轴的移动变量,速度(m_speed在函数外定义为全局变量)然后通过 ...