zoukankan      html  css  js  c++  java
  • Windows编程学习笔记(九)

    第六章 定时器

    定时器的原理及使用,在windows程序中的作用,WM_TIMER消息的使用。

    /******************************************************************************/

    我们都知道,无论是那种语言和程序,定时器功能都是必不可少,他的作用非常广泛,·定时显示·在游戏同步的应用·多媒体播放声音等等,下面就系统的学习windows程序设计中的定时器。

    定时器消息不是异步的

    定时器使用硬件中断,但WM_TIMER消息不是异步的,wm_timer放在消息队列中,当程序中其他信息执行期间,程序不会受到任何wm_timer消息。

    /*********************************************************************************/

    定时器的使用

    有三种方法:

    ·最简单的方法,就是让定时器发送wm_timer消息到窗口处理程序中,开始计时时使用SetTimer(hwnd,timer_ID,mmsec,NULL);这样程序就会每隔mmsec毫秒收到一个wm_timer消息,使用完后,呼叫KillTimer(hwnd,timer_id)来释放定时器。这用方法有一定的缺陷,就是当窗口处理程序处理别的事情时,有可能不会理会wm_timer消息。

    ·这种方法是吧wm_timer消息发送到程序的另一个消息处理函数中,这种函数也是用CALLBACK 修饰的,VOID CALLBACK TimerProc(HWND hwnd,UINT msg,UINT timer_id,DWORD wParam);

    Hwnd是在呼叫SetTimer时指定的窗口句柄,windows把wm_timer消息发送给TimerProc,因此消息参数是WM_timer,所以当我们启动定时器时,可以这样写:

    SetTimer(hwnd,timer_id,mmsec,TimerProc);

    KillTimer(hwnd,timer_id);

    这样就可以把这个定时器与TimerProc关联起来了。

    ·第三种方法和第二种方法差不多,只不过hwnd参数设定为NULL,第二个参数ID也被忽略了,例如:

    iTimerID= SetTimer(NULL,0,mmsec,TimerProc);

    KillTimer(NULL,iTimerID);

    这种方法很少使用,只有我们不去明确的说明需要这个定时器的ID,也就是说,我们不去关心ID,而且通常使用一系列的SetTimer时,这种方法是十分有用的。

    /***********************************************************************/

    系统时间

        和定时器十分相关的一个内容就是系统时间,虽然书上没讲,但还是学习一下。

    系统时间可以保存在SYSTEMTIME结构中,先看下SYSTEMTIME的定义

    typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;

    } SYSTEMTIME,
    *PSYSTEMTIME;

    各个字段的内容显而易见,

    wYear

    The year (1601 - 30827).

    wMonth

    The month.

    January = 1
    February = 2
    March = 3
    April = 4
    May = 5
    June = 6
    July = 7
    August = 8
    September = 9
    October = 10
    November = 11
    December = 12

    wDayOfWeek

    The day of the week.

    Sunday = 0
    Monday = 1
    Tuesday = 2
    Wednesday = 3
    Thursday = 4
    Friday = 5
    Saturday = 6

    wDay

    The day of the month (1-31).

    wHour

    The hour (0-23).

    wMinute

    The minute (0-59).

    wSecond

    The second (0-59).

    wMilliseconds

    The millisecond (0-999).

    我们使用函数GetSystemTime来获得系统时间。

    SYSTEMTIME sys_time;

    GetSystemTime(&sys_time);

  • 相关阅读:
    C# if else 使物体在X轴循环移动
    Jmeter之csv、用户自定义变量以及Query Type分析
    jmeter实战之笔记整理
    Badboy参数化
    Jmeter之Badboy录制脚本及简化脚本http请求
    jmeter之jdbc请求
    性能测试
    接口自动化学习--testNG
    接口自动化学习--mock
    Git工具使用小结
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662812.html
Copyright © 2011-2022 走看看