• DJYGUI系列文章十:GDD定时器


    目录

    1 GDD定时器概述

    2 ​​​​​​​API说明

    2.1 GDD_CreateTimer: 创建定时器

    ​​​​​​​2.2 GDD_FindTimer: 查找窗口指定ID的定时器

    ​​​​​​​2.3 GDD_ResetTimer: 重新设置定时器参数

    ​​​​​​​2.4 GDD_DeleteTimer: 删除定时器


    1 GDD定时器概述

            GDD 的定时器是以系统TICK为基准进行计时,是属于一种软件模拟性质的虚拟定时器,这些特性使得定时器不会有很高的精度和准确度,适用于一些对时间要求不是很严格的场合。定时器是作为窗口的资源形式存在,它的服务对象是直接面向窗口。每个窗口都可以由用户创建最多65536个独立的定时器,在窗口运行过程中,用户可以动态去创建和删除定时器,也可以动态去修改已有的定时器运行参数。当一个定时器超时发生后,定时器所属的窗口过程将会收到一条MSG_TIMER消息,MSG_TIMER参数会附带产生该消息的定时器ID,以便用户对多个定时器产生的超时消息加以识别。用户需要注意的是: MSG_TIMER消息是优先级最低的一类,只有当窗口所属的消息队列中没有其它消息时,系统才会将MSG_TIMER派发到它的目标窗口过程函数。

    2 ​​​​​​​API说明

    2.1 GDD_CreateTimer: 创建定时器

    TIMER* GDD_CreateTimer(HWND hwnd,u16 Id,u32 IntervalMS,u16 Flag);

    头文件::

    gdd.h

    参数:

    hwnd: 定时器所属窗口。

    Id: 定时器ID,由用户指定一个0~65535之间的数,所以理论上,每个窗口都可以创建65536个定时器,用户在创建定时器时,必须保证同一窗口下的定时器ID是唯一的,否则该函数会创建失败。

    IntervalMS: 定时间隔,单位:毫秒。

    Flag: 定时器标志属性,可以是以下值组合:

    TMR_START: 创建成功后,便立即启动定时器。

    TMR_SINGLE: 如果指定了该标记,则为单次定时模式,否则为循环定时模式。

    返回值:

    成功则返回新创建的定时器对象指针;失败则返回NULL。

    说明:

    当定时器定时时间到来时,将为所属的窗口产生一条异步处理的定时器超时消息MSG_TIMER,在所有的消息类型中,MSG_TIMER属于优先级最低的,只有当所有其它消息处理完成后,系统才会真正将MSG_TIMER消息发送到窗口过程函数,交由用户处理响应,当因系统繁忙导致未能及时处理MSG_TIMER消息时,同一定时器将不会重复产生MSG_TIMER消息,以避免这些没有意义冗余操作影响系统响应性能。

    ​​​​​​​2.2 GDD_FindTimer: 查找窗口指定ID的定时器

    TIMER* GDD_FindTimer(HWND hwnd,u16 Id);

    头文件:

    gdd.h

    参数:

    hwnd: 定时器所属窗口。

    Id: 需要查找的定时器Id。

    返回值:

    查找到的定时器对象指针;如果窗口不存在指定Id的定时器,则返回NULL。

    ​​​​​​​2.3 GDD_ResetTimer: 重新设置定时器参数

    BOOL GDD_ResetTimer(TIMER *ptmr,u32 IntervalMS,u32 Flag);

    头文件:

    gdd.h

    参数:

    ptmr: 需要重新设置的定时器对象指针。

    IntervalMS: 定时间隔,单位:毫秒。

    Flag: 定时器标志属性,可以是以下值组合:

    TMR_START: 创建成功后,便立即启动定时器。

    TMR_SINGLE: 如果指定了该标记,则为单次定时模式,否则为循环定时模式。

    返回值:

    TRUE:成功; FALSE:失败。

    说明:

    当指定的定时器被重置时,如果计时器正在运行中,那么它的计时时间将会强制重新丛0开始计数,如果之前产生了定时器消息未被及时处理,也将会被移除。

    ​​​​​​​2.4 GDD_DeleteTimer: 删除定时器

    BOOL GDD_DeleteTimer(TIMER *ptmr);

    头文件:

    gdd.h

    参数:

    ptmr: 需要删除的定时器对象指针。

    返回值:

    TRUE:成功; FLASE:失败。

    说明:

    当一个定时器不需要再使用时,用户可以使用该函数来删除指定的定时器;当然,定时器属于窗口的私有资源对象,即便用户不调用该函数来删除那些不再使用的定时器,那么,在窗口退出(销毁)前,系统也将会自动删除这些定时器,以避免因资源泄漏而产生系统崩溃。另外,定时器已产生但还未及时处理的消息在删除定时器时也会将该消息从消息队列中删除。

  • 相关阅读:
    这17个小工具,让我的开发效率提升了50%
    Elasticsearch向量检索的演进与变革:从基础到应用
    Java教程之自己动手编写清理工具:如何清理MarkDown文档中多余的图片
    一文带你深入理解【Java基础】· 枚举类
    部署kubevirt教程
    AI项目二十三:危险区域识别系统
    Mysql中DML操作数据(增,删,改)
    Go : for 语句简单使用
    Redis学习之Redis概述及原理、基本操作及持久化
    19.在springboot中集成dubbo(zookeeper)
  • 原文地址:https://blog.csdn.net/wangjianzhongfj/article/details/7106947