这个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