zoukankan      html  css  js  c++  java
  • MFC定时器

    在程序中我们经常要使用定时刷新的功能,典型的应用是在信息管理系统中表单要跟着数据库中的数据变动。MFC提供了定时器来完成这个功能。

    =========================================================================

    在MFC中和定时器相关的有三个函数:

    UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) );
    afx_msg void OnTimer( UINT nIDEvent );
    BOOL KillTimer( int nIDEvent );

    =========================================================================

    参数说明:
    UINT nIDEvent:定时器的ID,给定时器唯一的身份验证,如果在一个程序中有多个定时器可以用这个ID来确定是那个定时器发送的消息。
    UINT nElapse: 定义刷新时间,即间隔多长时间刷新一次,单位是毫秒。
    void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD):
                  这个回调函数中实现刷新时所做的操作,如在数据库中读取数据。但是我们大多数时候不在这里实现,而是在OnTimer中。

    =========================================================================


    函数功能:
    SetTimer用来定义一个定时器的属性,如改定时器的ID,刷新时间,处理函数。
    OnTimer实际时系统定义消息用来响应WM_TIMER消息,在这里可以实现对多定时器中的各个定时器分别响应,这里才时定时程序大展宏图的地方。
    KillTimer用来结束一个定时器。

    下面我们用一个例子来说明定时器的使用:
       这个例子用来实现一个简单的功能,就是在一个单文档程序中,每间隔5秒弹出一个消息框提示“定时器1”,每隔7秒弹出一个消息框提示“定时器2”。
       建立单文档程序略,一路Next。

    =========================================================================

    (1)在resource.h中定义两个定时器的ID

    #define IDTIMER1  1
    #define IDTIMER2  2
    


    (2)在CMainFrame的OnCreate函数中定义两个定时器的属性。

    SetTimer(TIMEID1,5000,0);
    SetTimer(TIMEID2,7000,0);

    (3) CMainFrame中对WM_TIMER进行响应。

    oid CMainFrame::OnTimer(UINT nIDEvent)
    {
        // TODO: Add your message handler code here and/or call default
        switch(nIDEvent) {
        case TIMEID1:
            {   
                AfxMessageBox("定时器1!");
                break;
            }
    case TIMEID2:
            {   
                AfxMessageBox("定时器2!");
                break;
            }
        default:
            ;
        }
       
        CFrameWnd::OnTimer(nIDEvent);
    }

    (4)在CMainFrame的析构函数中添加

    KillTimer(IDTIMER1);
    KillTimer(IDTIMER2);

    ==============================

    参考2

    当执行到程序的某一行代码时,需要添加计时器,就用这条语句:

    SetTimer(1, 1000, NULL);

    参数如下:

    UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse,
      void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD));

    设置好后计时器立马生效,1秒后计时器发生中断,在代码所在的类中进行捕捉:

    1.在该类的消息中添加:

    BEGIN_MESSAGE_MAP(CTab1, CDialog)  // CTab1是自己定义的一个类
        ...
        ON_WM_TIMER()
        ...
    END_MESSAGE_MAP()

    2.所在的类中添加成员函数:

    void OnTimer(UINT_PTR nIDEvent);

    3.添加函数的代码,即捕捉后的执行代码:

    void CTab1::OnTimer(UINT_PTR nIDEvent)
    {
        switch (nIDEvent)
        {
        case 1:  // 计时器1
                   .... // 处理的代码
                   KillTimer(1);  // 删除此计时器,否则计时器中断完后会自动重新开始计时,到下一次中断时还会发生新的中断
                   break;
    
        case 2:  // 计时器2
                   .... // 处理的代码
                   break;
        default:
                   MessageBox("default: KillTimer");
                   KillTimer(nIDEvent);
                   break;
        }
    }
  • 相关阅读:
    httprunner 3.x--参数化parameters(参数和值多对一,多对多,一对一等),csv文件
    httprunner 3.x--variables变量和声明(变量和值一一对应)
    httprunner 3.x 带参数接口测试(get方法)
    appium安装(windows7)
    httprunner 3运行报错AttributeError: module 'allure' has no attribute 'severity_level'
    jmespath用法
    httprunner3.x 测试用例应用/变量传递(测试用例编写)
    Python框架之Tornado(一)
    Python之Web框架
    Python 装饰器(进阶篇)
  • 原文地址:https://www.cnblogs.com/chengxuyuancc/p/2542269.html
Copyright © 2011-2022 走看看