有关多媒体定时器问题

stevecrisewu 2005-04-09 09:27:32
多媒体定时器是一个单独的线程
本人程序就是利用了这点定时回调偶的函数

但是,在某些时候定时器好像被挂起,也就是回调函数不执行了
但是整个应用程序还是处于正常状态

经过多方面的分析,也未能找到原因(到目前为止只出现过两次,它需要长时间的测试,出现的概率不大)

请问高人,可能是什么原因导致了这个结果,帮偶分析分析。

难道是别的线程影响了这个线程?
...全文
365 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
AntonlioX 2005-05-21
  • 打赏
  • 举报
回复
up
stevecrisewu 2005-04-11
  • 打赏
  • 举报
回复
感谢AthlonxpX86(桃源村) 的释疑

给分:)
AthlonxpX86 2005-04-11
  • 打赏
  • 举报
回复
在Windows这样的多任务操作系统下不要要求定时器精度有多高,更高优先级的任务挂起你的定时器是完全可能的,因此编写程序是要考虑到这一点,尤其是在任务繁重时

我试验过多媒体定时器,虽然它的精度可达到1ms,但定时器定时的最小数值却是4~5ms,也许这就是线程调度的最短时间,定时器和你的程序是在不同线程中运行,因此应该是定时器事件唤起了线程的运行,(我记得以前在一本书上看到线程的最短时间片好像是18ms),如果你的任务所在的线程被挂起,你将有一段时间不能运行,这将造成延迟的可能,尤其是从磁盘读写资料的时候,磁盘驱动程序(高优先权)甚至可能使你的程序还有定时器挂起超过200ms或者永远挂起,后果可想而知

要实现真正意义的定时器只能使用单任务操作系统,或者实时操作系统
stevecrisewu 2005-04-11
  • 打赏
  • 举报
回复
如果说任务重可能会发生这种情况,但是windows下本身的定时器是不准的,我设置的10ms执行一次,虽然大多时候确实在10ms左右,但也有很多时间超过100ms甚至200ms,所以,执行的任务多少是否真的会影响定时器?

内部会影响而外部导致的延迟则不会影响?
AthlonxpX86 2005-04-10
  • 打赏
  • 举报
回复
另外注意定时器回调函数中的任务量不要太大,否则会类似与阻塞操作那样,函数运行时间超出定时时间的话容易被挂起,一般定时器能达到通知应用程序的目的就行了,要实现功能的话还是应该在应用程序中实现的
AthlonxpX86 2005-04-10
  • 打赏
  • 举报
回复
看你的定时器回调函数中是否有堵塞操作了,比如有线程同步,信号量之类的等待操作的话,挂起是很有可能的
higherlin 2005-04-09
  • 打赏
  • 举报
回复
没有见过!不好回答.
oyljerry 2005-04-09
  • 打赏
  • 举报
回复
回调函数不执行,是不是那个线程挂起了
stevecrisewu 2005-04-09
  • 打赏
  • 举报
回复
用timesetevent设置的回调函数
signoft 2005-04-09
  • 打赏
  • 举报
回复
没有遇到过定时器不好使的情况
关注
stevecrisewu 2005-04-09
  • 打赏
  • 举报
回复
自己顶一下
stevecrisewu 2005-04-09
  • 打赏
  • 举报
回复
不能
因为这样的情况发生的很少,好几个月了,就发生过两次

timeSetEvent是基于内核的,优先级应该很高了
cnwww 2005-04-09
  • 打赏
  • 举报
回复
代码错误。
surstar 2005-04-09
  • 打赏
  • 举报
回复
让该线程挂起??
----
在等待某东西吧~ 或是优先级太低了
stevecrisewu 2005-04-09
  • 打赏
  • 举报
回复
问题是有什么原因能导致让该线程挂起??

该线程里面包含了一些消息处理,比如界面更新等,这会有问题吗?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧