首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

难题啊sleep函数

2012-02-02 
难题啊,救命啊,sleep函数各位大侠,我再vc++6.0MFC模式下。编制了一个小软件,是单线程的程序。现在遇到的问题

难题啊,救命啊,sleep函数
各位大侠,我再vc++6.0MFC模式下。编制了一个小软件,是单线程的程序。现在遇到的问题是我用了sleep函数在暂停线程执行时间,比如我sleep(500),也就是暂停了0.5秒钟,可是我用计数器计算了一下发现程序是在1.5秒钟后执行的。现在有没有什么办法把这个时间提前一秒钟,也就是按照我设置的sleep(500)来暂停时间,而不是实际的1.5秒钟。能不能把系统默认的sleep暂停函数提前一秒钟执行,这样就刚好符合我的要求了。或者有没有其他的方法,对于这个延时我的精度不要很搞的,只要误差在0.5秒以内就行。现在超过了1秒钟。
怎么办啊?

[解决办法]
用定时器和sleep都可能出现延时不准确的情况,
用内核对象Event来模拟超时
HANDLE hEvnet = CreateEvent(NULL,FALSE,FALSE,NULL);
WaitForSingleObject(hEvent,500)//0.5秒

用事件好处不会挂起线程。
[解决办法]
Windows本来就不是实时操作系统,精确是不可能的,不过只要你的CPU负载没有过高,Sleep的精度达到20ms还是没问题的,你是不是计算时间的方法不对呢?

另外,WaitForSingleObject是会挂起线程的。
[解决办法]
Sleep虽然不准, 误差也在ms级别, 不会差到1秒去, 或者线程被挂起, 或者CPU被其他线程占用100%, 总之不是Sleep的问题
[解决办法]
多线程下,你搞不清楚什么时候操作系统会调度你的线程。
因此这个时间是不可以精确预期的。

热点排行