蓝天,小湖,湖水中一方小筑

wxWidgets中的Timer

像前面说的,做项目要用到wxWidgets,于是装上用之,现在需要用Timer了,继续折腾吧。其实选Timer的时候经过了几次折腾,第一次是想用boost写 一个timer出来,但是没想好怎么执行一定时间后调用某函数或方法,于是作罢。在网上瞎转后回宿舍和人讨论,某牛告诉我说QT里面有Timer,于是突然想到wxw idgets的timer,做了几个小例子后苦于其要依托于某widget,今天又想试试boost的thread,试了一天后,觉得我是没可能作出来这东西的,于是 再次转回wxTimer,怕以后再这样转来转去啥都不会了,于是在这块地方留个脚印,让我以后转回来的时候还能找到我自己,嗯。

开始正题,wxTimer,目前按我的理解来看,是一个计时器,可以在到时间后,调用某个方法,但是到现在为止,我看到的都是要把计时器的事件绑定在某个widget 的事件列表之内,于是,只好虚构一个类,继承于某种widget,然后不让丫显示出来,我也只能想到这种方法了。程序在下面:

头文件 timer.h

 1 #ifndef __TIMER_H__
 2 #define __TIMER_H__
 3 
 4 class Netsim : public wxApp
 5 {
 6     public:
 7         virtual bool OnInit();
 8         void on_timer(wxTimerEvent& f_event);
 9 };
10 
11 class Timer : public wxFrame
12 {
13     public:
14         Timer();
15 
16         DECLARE_EVENT_TABLE()
17 
18     private:
19         wxTimer m_timer;
20 };
21 
22 
23 DECLARE_APP(Netsim)
24 
25 BEGIN_EVENT_TABLE(Timer, wxFrame)
26     EVT_TIMER(wxID_ANY, Netsim::on_timer)
27 END_EVENT_TABLE()
28 
29 #endif // __TIMER_H__

程序文件 timer.cpp

 1 #include <iostream>
 2 
 3 #include "wx/wxprec.h"
 4 
 5 #ifndef WX_PRECOMP
 6 #include "wx/wx.h"
 7 #endif
 8 
 9 #include "timer.h"
10 
11 IMPLEMENT_APP(Netsim)
12 
13 bool Netsim::OnInit()
14 {
15     Timer *foo = new Timer();
16     wxFrame *frame = new wxFrame((wxFrame*) NULL, -1, _T("Hello wxWidgets World"));
17     frame->CreateStatusBar();
18     frame->SetStatusText(_T("Hello World"));
19     frame->Show(TRUE);
20     SetTopWindow(frame);
21     return true;
22 }
23 
24 void Netsim::on_timer( wxTimerEvent& f_event )
25 {
26     std::cout << "Hello what" << std::endl;
27 }
28 
29 Timer::Timer() : wxFrame((wxWindow *)NULL, wxID_ANY, _T("")), m_timer(this)
30 {
31     m_timer.Start(1000);
32 }

Timer就是我虚构的一个类,虽然继承于wxFrame,但是在构造函数里面就没有生成那个窗口,只是设置了一下内置的计时器。但是需要注意的一点就是这个类是多重 继承,它还要继承于一个timer,那个m_timer就是类中wxTimer变量的变量名。别的就没啥好说的了,在wxApp的OnInit函数中新建一个Time r类的实例就可以了,计时器就开始跑了,然后Hello What就出现在终端上了,嗯。