Winforms 定时器速度VS无限while循环
我有下一个问题。在windows窗体中,我需要制作一个模拟while循环的计时器。我已经运行了一些测试,一个while循环比一个间隔为1的计时器快27倍。所以我的问题是,如何用计时器模拟while循环。这是我用来测试间隔的代码:Winforms 定时器速度VS无限while循环,winforms,c++-cli,Winforms,C++ Cli,我有下一个问题。在windows窗体中,我需要制作一个模拟while循环的计时器。我已经运行了一些测试,一个while循环比一个间隔为1的计时器快27倍。所以我的问题是,如何用计时器模拟while循环。这是我用来测试间隔的代码: private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { m_nI++; lbltimer->Text
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++进行任何响应。提前谢谢
另外,我知道Application::DoEvents()不好用,但它是在windowsforms中测试无限while循环的唯一解决方案。计时器分辨率由系统心跳给出。这通常默认为64拍/秒,即15.625毫秒。但是,有一些方法可以修改这些系统范围的设置,以实现低至1毫秒左右的计时器分辨率 有关更多详细信息,请阅读
另一方面,
而循环持续运行,如果使用不当,可能会导致UI冻结。你想用这些代码实现什么?对于我目前正在进行的项目来说,实现速度非常重要。整个问题没有任何意义。如果需要while循环,那么使用while循环。当然,不要在Timer_Tick事件处理程序中使用它。如果不占用UI,就不能在UI线程上运行阻塞循环。这就是为什么你需要做这些事。使用后台线程解决问题。你能给我一个后台线程的示例代码吗?我将以此作为答案。UI线程只需要做对人类有意义的事情。世卫组织的眼睛完全无法看到以1毫秒为增量的数字变化。这是一个完全模糊,在50毫秒更新时开始变得模糊。对于一个计时器来说足够慢了,一个hot while()循环完全是多余的。避免编写无意义的代码,这样的问题就会消失。但我如何实现与while循环相同的速度,这只是我通过计时器提出的问题,你不能。。。。但是您可以通过知道循环的一次迭代需要多少时间来找到解决方法(称为jugaad),并在一个计时器事件中运行循环那么多次。。。。。。。或者,使用Application.DoEvents运行while循环(但在使用DoEvents之前读取)