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就出现在终端上了,嗯。