sepqek
驱动牛犊
驱动牛犊
  • 注册日期2004-03-25
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2393回复:16

我想用C++实现1ms的定时,请问可不可以实现,如不能,要如何做

楼主#
更多 发布于:2004-11-15 17:20
我想用C++实现1ms的定时,请问可不可以实现,如不能,要如何做

最新喜欢:

beejoybeejoy
xx_focus
驱动中牛
驱动中牛
  • 注册日期2003-08-06
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望10点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-15 17:45
在多任务操作系统下不一定能,在实时系统下是一定可以的.
Windows下用 GetTickCount() 可以获取系统运行经过的时间(启动开始)大概能精确到1ms,基本上它是以 100ns 左右计算的,当然
多任务系统不会这么精确 :D
lanren_me
驱动牛犊
驱动牛犊
  • 注册日期2004-11-11
  • 最后登录2007-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-16 08:43
使用:timeSetEvent

#define  MilliSecond  1//定时间隔1毫秒
#define  Accuracy     1//系统允许的分辨率最小值
....
    TIMECAPS  mtimecaps;
    int TimerResolution;
    //从系统获得关于定时器服务能力的信息,
    //分辨率不能超出系统许可值(1到16毫秒)
    if (timeGetDevCaps(&mtimecaps,sizeof(TIMECAPS))==TIMERR_NOERROR)
     TimerAccuracy=mMin(mMax(mtimecaps.wPeriodMin,Accuracy),mtimecaps.wPeriodMax);

    timeBeginPeriod(TimerAccuracy);
    //设置定时器分辨率
    TimerResolution=1;//设置定时间隔为1毫秒

    //产生间隔1毫秒,周期执行的定时器事件;启动定时器
    TimerID=timeSetEvent(TimerResolution,TimerAccuracy,&TimerCallProc,1,TIME_PERIODIC);
sepqek
驱动牛犊
驱动牛犊
  • 注册日期2004-03-25
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-16 12:44
谢谢大家
我先前听说在WINDOWS要实现1MS或小于1MS的定时,需调用windows的sdk
lxh_phr
驱动小牛
驱动小牛
  • 注册日期2001-05-14
  • 最后登录2023-10-18
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望156点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-11-16 18:51
即使你用1ms来定时,实际时间大大超过1ms。
lxh_zz
hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-20 21:45
好像使用VC没有那么特别准时的,那么真正准时的是怎么开发的呢?求问ING
大学课程加上语文吧,否则在驱网里都不会提问题:)
windchen
驱动牛犊
驱动牛犊
  • 注册日期2004-08-11
  • 最后登录2010-01-14
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-11-22 08:43
就是用GetTickCount() 了,MSDN中显示说它是毫秒级的计时。
raodan
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2005-10-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-11-23 23:14
http://www.vccode.com/file_show.php?id=647
sepqek
驱动牛犊
驱动牛犊
  • 注册日期2004-03-25
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-11-24 09:28
谢谢大家,我是想用定时来实现并口的1MHZ的数据采集,
按RAODAN的说法,只能通过对8253进行操作才能实现,
另部,一般并口通讯的速度是多快,一秒钟有多少K字节
谢谢!
raodan
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2005-10-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-11-24 16:00
定时的功能就是靠中断来实现的,在中断处理程序中做你需要的处理,8253只是为你提供一个时间中断的入口,至于做什么事情是你自己决定的。至于是否非要用8253倒是不一定,看你的时间精度的要求和应用的情况了。
yuyu804
驱动牛犊
驱动牛犊
  • 注册日期2004-07-30
  • 最后登录2005-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-16 10:45
我知道在场的各位高手云集,小妹在此求助。
我要求助求埃尔米特矩阵的特征值和特征向量的C语言程序,我查了好多的资料,对于实对称矩阵的特征值和特征向量的求解参考有好多,但是关于复数的埃尔米特矩阵的求解方法的参考还没有找到,真诚的希望各位能给予帮助,我会铭记在心的,谢谢!
雨郁
yuyu804
驱动牛犊
驱动牛犊
  • 注册日期2004-07-30
  • 最后登录2005-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-16 10:49
我上次做了一个PCI接口,然后想用VC来实现定时,但是最后并不能达到1ms这么快的时间,请教别人说开发多进程可以实现,但是应该很难吧。
雨郁
fwc
fwc
驱动牛犊
驱动牛犊
  • 注册日期2001-04-26
  • 最后登录2012-04-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-01-21 13:58
使用多媒体时钟,一般能到5ms左右,你可以起一个线程,在里面阻塞等待定时器的消息,随后用好像是AfxMessage发送自定义消息到窗口类,要高精度定时器,只能硬件实现了,尤其涉及到A/D,为什么不用单片机采集,用USB传输进计算机呢?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-01-23 11:31
基本上是不可能,除非你在某段时间一直执行某个任务,否则一旦线成调度就几十个毫秒了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
ZHULUSHENG
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2006-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-01-28 09:38
用多媒体定时器,你要采集1MHZ那不可能,只有购买实时软件,可以提供0.2MS的准确定时。
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-01-28 10:28
如果是数据采集,那必须写driver了,否则软件定时(在ring3上)是根本不能保证的。
GetTickCount()只能知道时间差,根本无法精确定时,因为Win95以上都是抢占式多任务了,你的code随时都可能被suspend。
A strong man can save himself. A great man can save another.
walkonthesky
驱动中牛
驱动中牛
  • 注册日期2003-11-26
  • 最后登录2012-11-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-03-01 10:16
不可能精确到那个级别,受限于操作系统
与语言没有太大的关系

嵌入式里可以直接取时钟记数
[img]http://www.driverdevelop.com/forum/upload/walkonthesky/2004-07-08_2004-07-07_b847.gif[/img]
游客

返回顶部