定时器事件处理程序问题 - Vc ++

时间:2011-11-10 02:44:28

标签: multithreading events visual-c++ timer

我使用C ++语言在visual studio 2010中启动了一个新的窗体。 只有一个定时器配置为每1ms(1毫秒)生成一个事件

在timer事件处理程序中,我只增加一个名为Counter的变量(仅在此事件中使用),并在文本框中写入此变量的当前值,以便我可以看到它的当前值。

考虑到定时器事件每1ms发生一次,每1秒,变量Counter应增加1000次,但Counter变量大约需要15秒才能增加1000次。 15秒后,文本框中显示的值为1000。

我将定时器事件设置为1ms,但似乎事件仅发生在每个15ms,因为变量Counter比理论上花了15倍(15秒)达到1000(1秒= 1000 * 1ms) )。

有人对如何解决这个问题有一个想法吗?

我需要每1ms生成一个事件,我将调用另一个函数。 我每1ms间隔产生一次事件有多冷?或者尽可能少于此。

一个花药论坛的人告诉我创建一个线程来做这个工作,但我不知道该怎么做。

我使用Windows 7专业版64位,我不知道64位操作系统是否与此问题有任何关系。我认为PC硬件足以生成事件。 Core 2 duo 2GHz和3GB RAM。

http://img716.imageshack.us/img716/3627/teste1ms.png

1 个答案:

答案 0 :(得分:0)

System.Windows.Forms.Timer表示

Windows窗体计时器组件是单线程的,精度限制为55毫秒

这应该解释这种差异。你的方法似乎有点错误恕我直言。让线程每1ms唤醒一次,并且在preemptive multitasking OS.

中非常难以做到

你可以做的是

  1. 将计数器初始化为零,将高精度时间变量初始化为当前时间。
  2. 让计时器定期叫醒你
  3. 当计时器触发时,请使用高精度计时器查找当前时间。
  4. 计算新的旧高精度时间和增量计数器之间的增量,就像你期望的那样,或多次调用一些回调函数。
  5. 这种方法比任何计时器事件都更精确。