zhenlongyang
驱动小牛
驱动小牛
  • 注册日期2004-10-28
  • 最后登录2010-07-26
  • 粉丝1
  • 关注0
  • 积分729分
  • 威望100点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
阅读:1650回复:1

API高手:谁能解释清楚这个有关Windows多媒体定时器的问题?

楼主#
更多 发布于:2004-11-28 21:45
我有几个关于Windows提供的多媒体定时器使用方面的问题希望高手解答:
1)函数timeSetEvent()的第一个参数(延迟时间)的取值范围如何
确定?
2)多媒体定时器分辨率(Resolution)参数的具体含义是什么?其
高或低对使用有什么影响?
3)MSDN对函数timeBeginPeriod(UINT uPeriod)的说明是:设置应
用程序或设备驱动程序的最小定时器分辨率。对此我有几个疑问:
a.这个函数设置的是分辨率的最小值么?还是设定当前分辨率?

b.如果这个函数是设定当前分辨率,由于函数timeSetEvent()的
第二个参数也可指定一个分辨率,那么这两个函数指定的分辨
率意义相同么?如果这两个函数中指定的分辨率值不同系统将
如何处理呢?

c.按理说,这里指定的uPeriod的值应介于用函数timeGetDevCaps
()取得的系统允许最大分辨率与最小分辨率之间,否则调用此
函数将返回TIMERR_NOCANDO,但是我用timeGetDevCaps()在我
的系统上(CPU:Intel P4 2.4G,OS:WindowsXP,VC6.0)取得
的分辨率最小和最大值分别为1和1000000,当我指定uPeriod=
2000000时,函数返回正常值!(当指定0时,出错。)这是为
什么?
4)我试过不使用timeBeginPeriod()设置分辨率而直接使用
timeSetEvent()时,定时器一样正常工作(我用一个Win32控制台
程序测试的),难道这个函数可用可不用么?
5)我这样调用函数timeSetEvent():
timeSetEvent(1000,
             2000,
             lpTimeProc,
             0,
             TIME_PERIODIC);
结果定时器同样是每一秒(1000毫秒)调用一次lpTimeProc过程
而不是每2秒一次,经管这里指定分辨率为2000mS!事实上,即使
指定得再大一些也无所谓,同样是1秒调用一次!这是为什么呢?
分辨率在此到底起什么作用呢?
6)分辨率的高低对系统性能有直接影响么?当我在BIOS中将CPU的
超线程关闭后使用多媒体定时器时,无论指定的分辨率为多少(
从1到1000),在任务管理器中显示CPU使用率都为100%!但此时
打开其他程序使用时并未感到明显变慢;当打开超线程时CPU使用
率降到40%左右,不过两种情况下调整分辨率时,使用定时器的
进程对CPU的占用率并无太大变化(事实上我认为没变化),这是
怎么回事?到底分辨率对系统性能是如何影响的呢?

以上这些问题我在MSDN上没有找到详细、准确的答案,这虽然并不影响使用(至少我没发现有什么影响),但如果能深入、确切的了解他们,对于更安全、稳定的使用多媒体定时器编写须高精度定时的工业实时控制软件是会很有帮助的,如果哪位师傅有这方面的经验和更详细的资料,还望不吝赐教!谢谢!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-02 17:08
问的太多了,回答的好麻烦,.....
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部