VC++ SetTimer与KillTimer定时器的使用方法

不晚
不晚
发布时间:2026-10-13| 6人浏览过
原创

本文将详细介绍VC++环境中如何使用SetTimer和KillTimer函数来管理定时任务。通过定义回调过程并设置时间间隔,开发者可以高效地处理周期性逻辑。文章涵盖了核心API的参数说明及完整的代码应用场景。

定时器回调函数声明

在使用SetTimer指定回调方式时,必须定义符合规范的回调函数原型。该函数由系统自动调用,负责处理定时器消息。其标准声明格式如下:

VOID CALLBACK TimerProc(
  HWND   hwnd,      // 接收WM_TIMER消息的窗口句柄
  UINT   uMsg,      // 消息标识,通常为WM_TIMER
  UINT   idEvent,   // 定时器ID
  DWORD  dwTime     // 系统启动后的当前毫秒数
);

注意:回调函数名可以自定义,但参数类型和数量必须严格匹配上述签名。

创建与销毁定时器

第1步:定义定时器标识符

为了确保能够准确识别和管理特定的定时器,通常定义一个唯一的整型常量作为定时器ID。

const int ID_MY_TIMER = 101;

第2步:启动定时器 (SetTimer)

调用 SetTimer 函数来激活计时器。该函数有四种重载形式,此处使用带回调指针的形式。

SetTimer(hWnd, ID_MY_TIMER, 1500, TimerProc);
  • hWnd: 关联的窗口句柄。若为NULL,则不使用窗口消息机制。
  • ID_MY_TIMER: 定时器唯一标识。
  • 1500: 时间间隔,单位为毫秒。此处表示每1.5秒触发一次回调。
  • TimerProc: 指向回调函数的指针。若指定此参数,前两个参数将被忽略。

第3步:停止定时器 (KillTimer)

当不再需要定时器时,必须调用 KillTimer 释放系统资源,避免内存泄漏或后台持续运行。

KillTimer(hWnd, ID_MY_TIMER);

如果仅传递窗口句柄而省略ID,某些版本可能清除所有关联定时器,建议始终指定ID以确保精准操作。

完整应用示例

以下代码展示了一个典型的逻辑场景:根据某个布尔状态(例如用户输入或数据有效性标志),动态开启或关闭定时器。

void CMyClass::ProcessLogic()
{
    // 假设 m_bIsValid 是通过 UpdateData(true) 获取的状态变量
    // UpdateData(true); // 将UI控件值同步到成员变量
    
    if (m_bIsValid) 
    {
        // 启动定时器,每1500毫秒调用一次 playproc
        SetTimer(ID_MY_TIMER, 1500, &playproc);
    } 
    else 
    {
        // 取消定时器
        KillTimer(ID_MY_TIMER);
    }
}

// 回调函数实现
VOID CALLBACK playproc(
    HWND hwnd,
    UINT uMsg,
    UINT idEvent,
    DWORD dwTime
)
{
    // 在此处编写周期性执行的逻辑代码
    // 注意:回调函数应在独立线程或主线程安全上下文中运行
}

注意事项与排错

  • 线程安全:回调函数 TimerProc 通常在创建它的线程中执行。如果在回调中修改UI,确保调用了正确的消息队列,或在多线程环境下进行同步。
  • 精度问题:Windows定时器并非高精度定时器,受系统调度影响,实际触发时间可能有轻微延迟。对于微秒级精度需求,建议使用 timeGetTime 或高性能计数器。
  • 资源泄露:务必成对使用。每个成功调用的 SetTimer 都应对应一个 KillTimer,特别是在程序退出或窗口销毁时。

以上就是VC++中使用SetTimer和KillTimer实现定时器的详细内容,更多关于Windows平台下C++定时器开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。