【问题标题】:wxWidgets timer doesn't start?wxWidgets 计时器不启动?
【发布时间】:2018-11-30 23:52:24
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-studio wxwidgets sleep


    【解决方案1】:

    wxwTimerWxWidget 的事件循环一起使用。

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

    如文档中所述:

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

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

    【讨论】:

      【解决方案2】:

      wxWidgets 有休眠功能 wxMilliSleep

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

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 2018-09-26
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        相关资源
        最近更新 更多