请问在C++的如何实现占用CPU低的延时? 本帖最后由 dawnflowers 于 2012-02-21 21:44:24 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sleep有让位动作吗?刚在msdn发现了个 Thread.Sleep(int),按解释,好像就是在延时期间,cpu完全给其他程序用,具体哪位兄弟解决下?我的目的很简单,在延时过程中,程序不要还占着cpu负荷,系统也不会因为这个延时而卡 sleep是线程休眠的函数,参数就是毫秒,足够你的精度了。sleep( 1000 )就是休眠1秒,作用就是让当前线程被挂起1秒,1秒之后,再按需唤醒线程。因此,这个不是绝对准确的唤醒时间。还有一个用法 sleep(0),让当前线程立刻被挂起,然后立刻重新让系统调度需要被唤醒的线程执行。这个比较占cpu。 没太看明白你想干什么看你需求sleep足够了 Sleep(0) 多加几个地方 CPU占用率骤降 Sleep(15);效果相当的好,唯一需要注意的是,XP系统下,默认线程时间片粒度是15ms,所以,Sleep(1)效果等于Sleep(15);Sleep(0);比较特殊,作用上面已经有人说了。说用sleep、delay延时时,如果延时很长,会导致程序或整个系统假死,那是把Sleep()加到了消息循环里面,如果Sleep的时间较长,当然会假死了;这是用法不对。 PeekMessageTranslateMessageDispatchMessage 使用sleep没有错的,你说的假死是进程的消息被阻塞了,导致显示不正常.你可以在线程中使用sleep. 初学完成端口,对发数据实在纳闷~~~~~~~~~~~~~~~~~ 用VC怎么能够操作数据库 添加新类出现的问题!请高手解答! 如何得到Picture控件上鼠标点击的位置(以像素计算的位置) 刚用WINSOCK2做的文件传输,不行,希望有人进来改进一下 GetFont()获得的是当前字体吗? 把汉字转换为16进制 如何得到MDI中已有的子窗口的个数? 高分求教!关于YUV转RGB后的显示问题! 满分寻求Email VC通过ADO连接MySQL,连接字符串如何填写? 关于com组件调用问题
看你需求sleep足够了
效果相当的好,唯一需要注意的是,XP系统下,默认线程时间片粒度是15ms,所以,Sleep(1)效果等于Sleep(15);
Sleep(0);比较特殊,作用上面已经有人说了。说用sleep、delay延时时,如果延时很长,会导致程序或整个系统假死,那是把Sleep()加到了消息循环里面,如果Sleep的时间较长,当然会假死了;这是用法不对。
TranslateMessage
DispatchMessage
你可以在线程中使用sleep.