简易定时器设计

需求:

      要运用番茄时间管理,没有像文中所说的定时器,用手机也怎么方便,因为本身就经常是在计算机前工作学习的。那么下一个软件呢?有那么一款PomoTime,既包含了定时的功能,又含有添加Todolist,统计当天的番茄时间等的功能,而我仅仅需要一个定时功能,因为对于Todolist还是希望采用纸笔的方式进行记录。原来尝试看桌面右下角的时间,还判断一个番茄时间是否结束,发现工作中,往往因为过于集中注意力或分散注意力浏览网页去了而忘记对时间的查看,同时又想将自己所学的知识进行运用,于是想到了这么个方式,自己编写一个简易的定时器吧。

功能描述:

1. 显示分,秒,处于桌面最前面;

2. 设定分,秒;

3. 当设定的时间消耗完后会弹出对话框,进行提醒;

(这里没有采用声音提醒的原因是若采用这种方式,会影响到别人的办公与学习。)

语言选择:

由于这仅仅是一个很简单的功能实现,对于语言没有很大的要求,选择了C++,库为wxWidget。

界面设计:

使用wxFormBuilder

关键点描述:

    在整个过程中遇到的问题的地方时,如何进行倒计时?最先想到的就是onTimer这样类似的功能,在wxWidget库中找到了具有该功能的wxTimer类,在手册中这么一句话 its precision is platform-dependent, but in general will not be better than 1ms nor worse than 1s. 也就是说采用该方法进行时间设定可能每一次都会造成1ms-1s时间上的误差,这个误差不是很大,对于整个的设计目的并没有太大的影响。

    全部源码在Simple timer source code

    关于时间处理的部分代码如下:

   1: // timer_app.h
   2: ////////////////////////////////////////////////////////////////////////////////
   3: // main application frame declaration
   4: ////////////////////////////////////////////////////////////////////////////////
   5:  
   6: class TimerFrame : public MainDialogBase
   7: {
   8: public:
   9:     TimerFrame( wxWindow *parent );
  10:     virtual ~TimerFrame();
  11:  
  12: protected:
  13:     // protected event handlers
  14:     virtual void OnCloseDialog( wxCloseEvent& event );
  15:     virtual void OnSetButtonClick( wxCommandEvent& event );
  16:     virtual void OnStartButtonClick( wxCommandEvent& event );
  17:     
  18: public:
  19:     void OnTimer( wxTimerEvent& event );
  20:     
  21: private:
  22:     int m_minute;
  23:     int m_second;
  24:     wxTimer *m_clock;
  25:     wxDECLARE_EVENT_TABLE();    
  26: };
  27:  
  28: // timer_app.cpp
  29: // event list, combine timer event with OnTimer function
  30: wxBEGIN_EVENT_TABLE(TimerFrame, MainDialogBase)
  31: EVT_TIMER(TIMER_ID, TimerFrame::OnTimer)
  32: wxEND_EVENT_TABLE()
  33:  
  34: //......some code......
  35:  
  36: TimerFrame::TimerFrame(wxWindow *parent) : MainDialogBase( parent )
  37: {
  38:     m_clock = new wxTimer();               // create a new wxTimer
  39:     m_clock->SetOwner(this, TIMER_ID);     // set owner, #define TIMER_ID 1000
  40:     m_minute = 25;
  41:     m_second = 0;
  42: }
  43:  
  44: //......some code......
  45:  
  46: // count down the time and show
  47: void TimerFrame::OnTimer(wxTimerEvent& event)
  48: {
  49:     // determine the minute and second wait to show
  50:     if (m_second == 0 && m_minute == 0) {
  51:         m_clock->Stop();
  52:         wxMessageBox(wxT("Time over"),wxT("Timer"));
  53:         return;
  54:     } else if (m_second ==0) {
  55:         m_second = 59;
  56:         m_minute -= 1;
  57:     } else {
  58:         m_second -= 1;
  59:     }
  60:     wxString sTmp;
  61:     sTmp.Printf(wxT("%d"),m_minute);
  62:     m_minuteTextCtrl->SetValue(sTmp);
  63:     sTmp.Printf(wxT("%d"),m_second);
  64:     m_secondTextCtrl->SetValue(sTmp);
  65: }
  66:  

posted on 2012-06-28 15:35 钟谢伟 阅读(1428) 评论(3)  编辑 收藏 引用

评论

# re: 简易定时器设计[未登录] 2012-06-30 18:16 春秋十二月

乍一看标题还以为是讲定里器的原理、设计及实现,以前写过应用层的定里器,底层的数据结构可以是数组、堆、哈希、链表,性能各不一样,可据需求选择。  回复  更多评论   

# re: 简易定时器设计 2012-06-30 20:02 钟谢伟

@春秋十二月
额 躺着中中枪,成标题党了,对于定时器在学习数电的时候用电路图搭过电路,想必学过的都有这么个实验,不过对于深层的原理真不清楚,请问曾写过的内容在网上有没有可寻之处呢,给个网址。。谢谢  回复  更多评论   

# re: 简易定时器设计[未登录] 2012-07-01 01:00 春秋十二月

ace,boost,linux kernel都有实现源码,可以研究下。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(1)

随笔档案

IT网站

My Friends

搜索

最新评论

阅读排行榜

评论排行榜