首页 > 解决方案 > wxWidgets 计时器不启动?

问题描述

这个 wxWidgets 代码(模拟便携式sleep)不起作用。

MyClass::MyClass(){
m_timer = std::make_shared<wxTimer>(this, ID_TIMER);
}

void MyClass::WaitOneSecond()
{
  m_timer->StartOnce(1000);
  while (m_timer->GetInterval() < 1000);
}

通过 WaitOneSecond 调用单步执行 Visual Studio 时,不会出现延迟。 为什么 ?...

标签: c++visual-studiowxwidgetssleep

解决方案


AwxwTimer适用于WxWidget的事件循环。

这意味着它会在延迟到期后通知您,但您必须交还控制权。

如文档中所述:

有三种不同的方式来使用这个类:

  • 您可以从 wxTimer 派生一个新类并覆盖 wxTimer::Notify 成员以执行所需的操作。
  • 您可以使用非默认构造函数或 wxTimer::SetOwner 将通知重定向到任何 wxEvtHandler 派生对象。然后使用 EVT_TIMER 宏将其连接到将接收 wxTimerEvent 通知的事件处理程序。
  • 您可以使用派生类和 EVT_TIMER 宏将其连接到派生类中定义的事件处理程序。如果使用默认构造函数,则计时器对象将是它自己的所有者对象,因为它是从 wxEvtHandler 派生的。

推荐阅读