当Thread.Sleep的间歇时间参数设置过小时,精度很不同的解决方式

相同、问题时有发生

在C#及C++中起这么一个函数:void Sleep(int
Timeout),可以叫线程暂停指定的毫秒数。
但是自己于win8生调用这个函数实现准稳定频率发送udp数据包时,会来一个题材。当Timeout<15ms左右是时常,无论怎么削弱小Timeout,一秒钟发送的数据包和Timeout=15之上差不多差不多,除非Timeout=0。【/(ㄒoㄒ)/~~】于是,我就开始考虑是休是millisecondsTimeout有个最好小精度。

第二、调查结果总结

windows不是实时系统,15ms左右会轮询一不行,检查线程执行。这带来该就是致十分millisecondsTimeout精度为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[
](http://blog.csdn.net/cloudhsu/article/details/5773043)

②.使用C++11新特性

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

传言经过测试发现运行10万长达数据开展测试发现nanoseconds精度只能上1.03ms左右(注意仍上不交微妙级、纳秒级)
但是比使用timeBeginPeriod精度要大。我并未测试者