none
10ms 的多媒体定时器 RRS feed

  • 问题

  • 我想咨询下VC6.0中怎么降低多媒体定时器的CPU占用率,我的目的是循环使用10ms的定时器。现在写出来的程序内存占用率很高,20~30%。我用的是QueryPerformanceFrequency()和QueryPerformanceCounter()。请问VC6中或者别的版本中有更好的定时器或者使用方法吗?谢谢!我写的这个程序主要是用于10ms 的告诉串口通信,串口波特率是115200。谢谢!

    2008年7月22日 2:30

答案

  • 不能用休眠,休眠有误差,而且这个误差会积累。

     

    同样也得弄个线程,放个10ms的定时器,然后waitforsingleobject,每10ms会唤醒一次,通知别的线程干活,自己继续等。就10ms这个数量级以及串口通信来说,精度还是够的。

    2008年7月23日 16:51

全部回复

  • 你试试,创建一个后台线程,然后循环调用你的代码,每次调用完成后让你的线程休眠10ms!

    2008年7月23日 15:21
  • 不能用休眠,休眠有误差,而且这个误差会积累。

     

    同样也得弄个线程,放个10ms的定时器,然后waitforsingleobject,每10ms会唤醒一次,通知别的线程干活,自己继续等。就10ms这个数量级以及串口通信来说,精度还是够的。

    2008年7月23日 16:51
  •  Jimt200010 写:

    不能用休眠,休眠有误差,而且这个误差会积累。

     

    同样也得弄个线程,放个10ms的定时器,然后waitforsingleobject,每10ms会唤醒一次,通知别的线程干活,自己继续等。就10ms这个数量级以及串口通信来说,精度还是够的。

    这个waitforsingleobject怎么激活了,程序还需要做别的处理,现在就是开的多线程,在多线程中实验串口数据的计算并发送。目前,程序的流程是这样的。

    首先:串口接收数据,有两个串口同时工作,串口1和串口2.串口1波特率是115200,RS422,串口2的波特率是19200,RS232.接收到串口2的数据后,初步处理后,启动多媒体定时器,对其进一步处理,处理完后,多媒体定时器实现10ms一次的定时发送,将数据发送给串口1。此过程,定时器可能会连续工作几次,这个取决于数据的大小。

     

    谢谢!

    2008年7月29日 6:54
  • 我想,你在接收到数据时,是通过第一个串口的硬件事件响应的,然后你调用处理线程把需要处理的东西放到一个带发送的队列里面,然后由一个专门负责发送的线程进行发送,发送数据的过程用个循环直到发完为止!在循环里面休眠10ms!应该没有问题!

    2008年8月1日 6:58
  •  蒂企鹅 写:

    我想,你在接收到数据时,是通过第一个串口的硬件事件响应的,然后你调用处理线程把需要处理的东西放到一个带发送的队列里面,然后由一个专门负责发送的线程进行发送,发送数据的过程用个循环直到发完为止!在循环里面休眠10ms!应该没有问题!

    谢谢哈。这个休眠怎么实现啊,这个10ms内我现在是打算有另外一个线程实现数据的存储功能,另外,我外界的串口1的数据频率是100hz的。

    2008年8月2日 7:21