C++第五十五篇-定时器SetTimer

使用的一个百度AI代码生成网站: https://yiyan.baidu.com/

定时器的实现示例:

新建一个程序

 编写ConsoleApplication1.cpp

#include <iostream>
#include <Windows.h>
using namespace std;

#pragma comment(lib, "User32.lib")

//首先定义一个计时器计时事件的定义
#define  GETLASTINPUTINFO  109
UINT_PTR m_uGetLastInputInfo;

//然后写一个Time计时器(具体计时器的生成步骤就不在叙述)
void OnTimer() {
    static int count = 0;
    count++;
    cout << count <<endl;
    if (count >= 4) // 10s
    {
        cout << "kill timer" << endl;
        KillTimer(NULL, m_uGetLastInputInfo);
        PostQuitMessage(0);
    }
}


int main()
{
    m_uGetLastInputInfo = SetTimer(NULL, GETLASTINPUTINFO, 500, (TIMERPROC)OnTimer);  // 设置定时器,间隔为1000毫秒(1秒)

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    cout << "end" << endl;

    return 0;
}

 

说一下其中的坑点吧。

1. 报错无法解析的外部符号

 出现_imp的是链接库找不到,那么就到微软搜索SetTimer函数的链接库导入一下。

 所以需要用到#pragma comment(lib, "User32.lib")

2. KillTimer不生效

这是分为两种情况,参考链接:https://blog.csdn.net/NKhth/article/details/127952166

如果SetTimer第一个参数是NULL,未指定handle,那么定时器的ID就是它的return值,即m_uGetLastInputInfo。

如果SetTimer第一个参数是hwnd,指定了handle,那么定时器的ID就是它的第二个参数,即GETLASTINPUTINFO。

3. 程序在GetMessage阻塞,结束不了

需要使用PostQuitMessage(0);来发消息结束消息循环

 
posted @ 2024-02-01 10:01  o云淡风轻o  阅读(221)  评论(0编辑  收藏  举报