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);

  • 相关阅读:
    Android Glide详细使用教程
    mac上cocoapods安装与卸载
    Struts2+AJAX+JQuery 实现用户登入与注册功能
    Eclipse+ADT+Android SDK 搭建安卓开发环境
    CVE-2018-7600 Drupal核心远程代码执行漏洞分析
    利用kage把msf变成可视化远控平台
    在Red Hat Enterprise Linux 7.3上安装SQL Server 2017
    计算机取证之你必须要会用的24款工具
    StackStorm利用CORS null origin获得RCE (CVE-2019-9580)
    iOS/OSX漏洞分析和再现:CVE-2019-7286
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662812.html
Copyright © 2011-2022 走看看