wxWidgets计时器无法启动?

时间:2018-06-21 15:17:57

标签: c++ visual-studio wxwidgets sleep

此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);
}

在使用Visual Studio进行WaitOneSecond调用时,不会出现延迟。 为什么?...

2 个答案:

答案 0 :(得分:2)

wxwTimer用于WxWidget的事件循环。

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

如文档中所述:

  

有三种使用此类的方法:

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

答案 1 :(得分:2)

wxWidgets具有睡眠功能 wxMilliSleep

C ++ 11具有每个线程睡眠:std::this_thread::sleep_for