wx小部件计时器不启动?

wxWidgets timer doesn't start?

本文关键字:启动 计时器 小部 wx      更新时间:2023-10-16

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

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 时,不会出现延迟。为什么?。。。

wxwTimer

WxWidget的事件循环一起工作。

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

如文档中所述:

有三种不同的方法可以使用此类:

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

wxWidgets 有一个 sleep 函数 wxMilliSleep

C++11 具有每个线程休眠状态:std::this_thread::sleep_for