导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

能用select函数代替sleep吗

韩雷 2009-08-14 02:36:23
能用select函数代替sleep吗?
我的程序需要sleep 1微秒,但Sleep函数无法那么精确。因此我想用select函数代替,如下:

timeout.tv_sec=0;
timeout.tv_usec=1;
FD_ZERO(&readfd);

ret=select(keyboard+1,&readfd,NULL,NULL,&timeout);


不知这样用有什么问题。
...全文
274 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuWenjin 2009-08-16
windows 里面 select 中的us 那个参数好像是无用的,只用到ms
我好久前研究过 select 不能用于定时,受限于对像的状态,不同的状态,select 用时都不同,有的时候是直接返回的,用它来定时,估计行不同
回复
Randyqiu 2009-08-15
Sleep精度一般在5~10ms左右
有这么高的精度吗?
我看Programming with MFC,里面好像说只有55毫秒左右的精度啊
回复
韩雷 2009-08-15
看来我只能用Linux或UNIX了,Red Hat Linux怎么样?
回复
pady_pady 2009-08-14
毫无意义,WINDOWS线程切换自然产生长时间的延迟,一般是十几二十几MS,难道你认为自已的定器准?切换一次线程,你的定时器已经跑了好多MS了,只不过反应一次而已,在我看来,Sleep(1)=Sleep(0)=。。Sleep(10)...,他只有一个作用就是让线程切换一轮,而且微软说应该用Sleep(0)来实现切换最好。
回复
wish_cn 2009-08-14
Sleep精度一般在5~10ms左右,无法再低了。你就算用select,精度也到不了1us的,不信你可以试一下。
回复
schlafenhamster 2009-08-14
1us定时,在windows下好像难办到。
回复
MoXiaoRab 2009-08-14
写个for的循环,循环次数大一点
回复
1us靠软件来做比较难,估计是不行。
回复
韩雷 2009-08-14
[Quote=引用 4 楼 zyq5945 的回复:]
http://blog.csdn.net/hmill/archive/2005/07/29/439389.aspx
[/Quote]

文中的例子我都看了,只有用QueryPerformanceCounter的例子符合,其实我开始就是这么想的,但是这种方法是一个死循环,整个程序都会僵死,而select不会僵死。

回复
韩雷 2009-08-14
谢谢先

但是我现在就像找一个简便的方法,因为我觉得slect函数比类似SetTimer要跟简单易用,所以我想问下有经验的朋友,我如果这么做会有什么问题?特别是比较隐晦的问题。
回复
danxuezx 2009-08-14
学习一下,这个完全不懂……
回复
bohut 2009-08-14
要精确的话,
用汇编:_nop.
但要查一下,一个nop是几个时钟周期。
回复
yswlqj 2009-08-14
你可以自己弄一个定时啊,我以前弄过一个,最小单位就是1微妙。好像在Windows里最精确的定时就差不多1微秒吧,不过话说回来了,这个也太精确了,需要这么精确的定时吗?你可以在网上搜搜,很多关于定时的例子,写的不错的。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……