首页 > 编程语言 >C++第五十五篇-定时器SetTimer

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

时间:2024-02-01 10:14:50浏览次数:24  
标签:定时器 cout lib 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);来发消息结束消息循环

 

标签:定时器,cout,lib,C++,第五十五,计时器,SetTimer
From: https://www.cnblogs.com/smart-zihan/p/18000634

相关文章

  • 全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用
    前言我们之前跑了一个yolo的模型,然后我们通过PaddleDetection的库对这个模型进行了一定程度的调用,但是那个调用还是基于命令的调用,这样的库首先第一个不能部署到客户的电脑上,第二个用起来也非常不方便,那么我们可不可以直接将Paddle的库直接做成一个DLL部署到我们的软件上呢?答案是......
  • 【c++】引用的用法
    一、引用的介绍引用还有一个别的叫法:取别名通俗点说:每个人都有一个大名,可能也有一个小名,但是都是指一个人,引用也就是一个变量的别名。1.引用的概念:引用不是定义一个别的变量,而是给一个变量取别名注:引用变量编译器不会为这个变量单独开辟一块内存,它和它引用的变量使用同一块内存2.引......
  • C++ 使用单调时钟按一定时间间隔执行任务
    使用condition_variable实现定时执行任务遇到一个开发任务,需要按一定的时间间隔执行任务,本来是一个简单的功能,直接使用condition_variable就可以了最开始是直接使用condition_variable实现的定时触发机制,代码的大致实现类似于:#include<condition_variable>#include<chrono......
  • 如何在Visual Studio新C++项目中调用之前配置过的库?
      本文介绍在VisualStudio软件中调用C++各种配置、编译完毕的第三方库的方法。  在撰写C++代码时,如果需要用到他人撰写的第三方库(例如地理数据处理库GDAL、矩阵运算库Armadillo等),并不能像Python等语言那样,安装好库后直接在不同代码文件中使用;而是需要每一次新建一个代码文件......
  • 从C向C++——运算符重载
    本文的主要知识点是C++中的运算符重载。1.运算符重载所谓重载,就是赋予新的含义。函数重载(FunctionOverloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。**运算符重载(OperatorOverloading)**也是一个道理,同一个运算符可以有不同的功能。实际上,我们已经在不知不觉中......
  • 《C++ Primer Plus》(第六版)中文版——思维导图+附录PDF+源代码
    说明,以下文件可在异步社区免费下载不同之处在于原附录PDF文件没有书签,而本文分享的附录文件带有书签本文所有文件下载链接:https://www.123pan.com/s/lO3uVv-uaEKv.html思维导图(图片)以下仅为预览,高清图片可从文章开头下载链接中下载另外后续本人有空会制作XMind脑图版本,会添加......
  • 【侯捷C++面向对象笔记】补充5-new & delete重载
    平时所使用的new和delete操作,称之为表达式,一般由好几个步骤组成。如上图所示,new表达式会被编译器转化为三个步骤。new表达式不能重载,但其中operatornew是可以重载的。➡️全局::operatornew的重载why不能放在namespace内?因为全局operatornew是放在defaultglobalnamespac......
  • 【侯捷C++面向对象笔记】补充2-pointer-like & function-like class
    关键词:仿函数pointer-like:将一个类设计得像指针一样,通常通过重载*和->操作符实现。function-like:将类的成员设计得能像函数一样使用,通过重载()操作符实现。TipDemo应用:智能指针注意:->符号在作用一次后,会继续作用下去(不同于*号)Foof(*sp):f为一个Foo对象本体,使用时f.m......
  • 【侯捷C++面向对象笔记】补充3-template
    关键词:类模板,函数模板,成员模板,模板特化“泛化”和“特化”TipDemo类模板定义时需要显式地指定类型名。函数模板定义时编译器自动进行实参推导类型(但不提供隐式转换)。成员模板:模板中还包含模板模板(全)特化格式:template<>尖括号内为空模板偏特化(partia......
  • 【侯捷C++面向对象笔记】补充4-object model
    关键词:虚函数表,动态绑定,多态每个对象都维护自己的虚表指针,指向类的虚函数表。(所以对象的size比其包含的所有数据size多4,即虚指针大小)➡️动态绑定:(多态的实现原理)通过指针p找到对象c的vptr通过vptr找到classC的vtbl在vtbl中找到第n个虚函数并调用➡️子类调用父类函数隐......