定时器速度VS无限循环

时间:2014-05-23 08:06:15

标签: winforms c++-cli

我有下一个问题。在Windows窗体中,我需要创建一个模拟while循环的计时器。我已经运行了一些测试,并且while循环比具有1个间隔的计时器快约27倍。所以我的问题是,如何用我的计时器模拟while循环。这是我用来测试间隔的代码:

private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
             m_nI++;
             lbltimer->Text = m_nI++.ToString();
             if (m_nI > 10000000)
                 {
                     timer1->Enabled = false;
                 }

             while(1)
             {
                 m_nIMin++;
                 lblLoop->Text = m_nIMin.ToString();
                 Application::DoEvents();
                 if (m_nIMin > 10000000)
                 {
                     break;
                 }
             }
         }

m_nI被声明为全局,就像m_nIMin一样,它们都是整数。欢迎使用c ++ / cli或c ++中的任何响应。提前谢谢。

PS。我知道Application :: DoEvents()不好用,但它是在windowsforms中测试无限while循环的唯一解决方案。

1 个答案:

答案 0 :(得分:1)

计时器分辨率由系统心跳给出。这通常默认为64次/秒,即15.625毫秒。但是,有一些方法可以修改这些系统范围的设置,以实现低至1毫秒左右的定时器分辨率。

有关详细信息,请参阅Why .NET Timers are limited to 15ms

另一方面,

while循环连续运行,如果使用不当,可能导致UI冻结。