2011-11-10 76 views
1

我开始使用C++语言在Visual Studio 2010中的一个新窗口窗体。 只有一个配置生成一个事件每1毫秒(1milisecond)问题与计时器事件处理程序 - VC++

内部定时器事件处理程序定时器,我只是增加了一个名为计数器(谁是本次活动仅使用)变量,我写的这个电流值在文本框中变量,以便我可以看到它的当前值。

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

我将计时器事件设置为1ms,但似乎该事件仅发生在每个15ms,因为变量计数器比理论上花费了15次(15秒)多达到1000的值(1秒= 1000 * 1ms)。

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

我需要每1ms产生一个事件,在那里我会调用另一个函数。 我每隔1ms产生一次事件有多冷?如果可能的话,还是少于这个。

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

即时通讯使用Windows 7 profesional 64位,我不知道64位操作系统是否与这个问题有任何关系。我认为PC硬件足以产生事件。酷睿2双核2GHz和3GB内存。

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

回答

0

System.Windows.Forms.Timer指出

Windows窗体Timer组件是单线程的,并且被限制在55毫秒

所以应该解释这种差异的准确度。你的方法似乎有点错了恕我直言。有一个线程唤醒每1ms,并且也恰恰是很难在preemptive multitasking OS.

你能做什么,而不是做的是

  1. 初始化一个计数器清零,高精度时间变量当前时间。
  2. 有一个定时器将您定期唤醒您
  3. 定时器触发时,请使用高精度定时器来查找当前时间。
  4. 计算新的旧的高精度时间和增量计数器之间的增量,就像您期望的那样,或者多次调用某个回调函数。

这种方法比任何定时器事件都要精确得多。