我有下一个问题。在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循环的唯一解决方案。
答案 0 :(得分:1)
计时器分辨率由系统心跳给出。这通常默认为64次/秒,即15.625毫秒。但是,有一些方法可以修改这些系统范围的设置,以实现低至1毫秒左右的定时器分辨率。
有关详细信息,请参阅Why .NET Timers are limited to 15ms
另一方面, while
循环连续运行,如果使用不当,可能导致UI冻结。