我一直在尝试将我的计时器连接到一个功能。 在我的派生类中 我在做什么
Timer->SetOwner(this,wxID_Timer);
Timer->Connect(wxID_Timer,wxTimerEventHandler( Window::OnUpdate ), NULL, this );
我的OnUpdate声明是
void OnUpdate( wxTimerEvent& event );
任何人都可以告诉我这里有什么问题,为什么在我启动计时器后没有定期调用OnUpdate? 谢谢,麻烦您了。
另外我没有使用静态事件表。关于wxTimer的其他答案对我没有帮助。
答案 0 :(得分:6)
经过一番搜索,我确实找到了答案,没有人回答,所以我在这里发帖。 有一些事情我做错了。 一世。我实际上必须将班级连接到我的计时器。这意味着我必须做一些像
这样的事情this->Connect(Timer.GetId(),wxEVT_TIMER,wxTimerEventHandler( Window::OnUpdate ), NULL, this );
其中wxEVT_TIMER是事件类型。
与断开连接类似
this->Disconnect(wxID_Timer,wxEVT_TIMER,wxTimerEventHandler( Window::OnUpdate ), NULL, this );
答案 1 :(得分:4)
这里似乎有些混乱所以让我试着清除它。
您可以 在计时器本身上调用timer->Connect(...)
或使用SetOwner(frame)
,然后执行frame->Connect(...)
。
调用SetOwner()
然后在计时器上调用Connect()
没有多大意义,因为SetOwner()
确保将计时器事件直接传递给所有者。但是默认情况下没有所有者,并且计时器会将事件发送给自己,这就是为什么没有SetOwner()
调用你必须在计时器上调用Connect()
。
答案 2 :(得分:3)
答案对我不起作用。这就是我所做的。
首先,你必须让你的框架拥有wxtimer发出的事件。
m_timer.SetOwner( this );
然后你可以让你的框架的事件处理程序处理事件。 如果你只有一个计时器,请使用它。
this->Connect( wxEVT_TIMER, wxTimerEventHandler( Frame::OnTimer ), NULL, this );
如果您有多个计时器,请使用此计时器将每个计时器的事件连接到另一个计时器。
this->Connect( m_timer.GetId(), wxEVT_TIMER, wxTimerEventHandler( Frame::OnTimerForSpecificTimer ), NULL, this );
执行此操作将允许帧将timer事件放入其事件队列中并在可能的情况下处理它。