此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调用时,不会出现延迟。 为什么?...
答案 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