Settimer及回调函数的用法

  在网上看了settimer的一些用法发现能用的真没有,,,,可能是我没找对地方,大部分都是无脑复制粘贴,浪费了很多时间,如果你是一个对这种定时器一无所知的小白,那么请你看进来一定不会让你失望的!

  1. 实用settimer的第一步引入头文件:#include <Windows.h>

  2. 然后我们来看一下settimer及其回调函数的使用:  

      首先我们来看settimer的原型:(如下所示)(这个仅仅是窗口的一个定时器函数,我们现在是想把它用到控制台程序的而一般没有窗口的线程系统是不会给他指定消息队列的)

1 UINT_PTR SetTimer(
2 HWND hWnd, // 窗口句柄
3 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
4 UINT nElapse, // 时间间隔,单位为毫秒
5 TIMERPROC lpTimerFunc // 回调函数
6 }

      其函数的参数意义就如同上面所说的一样,我们常用的用法是SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器(在MFC中是不一样的这一点要注意),若最后一个参数是NULL,那么则默认调用的是ontime函数,但是当我们要调用我们自己的回调函数时可以用如下的函数:void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime) {   里面写下自己的内容   };网上大部分就是写到这里其实只但这里我们并不能成功的调用自己的回调函数,还要经过如下操作才可以:(虽然使用了SetTimer,但是没有对WM_TIMER消息进行分发,所以不会触发回调函数)

 1 void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
 2 {
 3   printf("%s","abc");
 4
 5 }
 6 void main()
 7 {
 8     SetTimer(0, 0, 1000, &TimerProc);
 9     MSG   msg;
10     while(GetMessage(&msg,NULL,0,0))
11     {
12         if(msg.message==WM_TIMER)
13         {
14             DispatchMessage(&msg);
15         }
16     }
17 }

      其中的DispatchMessage(&msg)就是分发消息,对vM_TIMER消息进行分发,分发到回调函数

参考文章:https://blog.csdn.net/dog250/article/details/5303603

原文地址:https://www.cnblogs.com/yskn/p/9195751.html

时间: 2024-10-09 19:57:04

Settimer及回调函数的用法的相关文章

cocos2dx动作结束回调函数的用法

cocos2dx中一个action结束后想正确使用回调函数 要用如下写法 CCFiniteTimeAction *actionOne = CCSequence::create( CCScaleTo::create(1.0f,0.5f,1.5f), CCFadeIn::create(1.0f), CCCallFunc::create(this,callfunc_selector(xx::menuSetVisableFalse)), NULL );

回调函数的用法(类之间的通信)

// ConsoleApplication3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <functional> using namespace std; //1 "方向盘" 类接收外部的操作, 把消息传到 "车" 类中, 车类把消息传入到 "轮子" 类上 //(子类发消息给父类) //2 "

回调函数的用法

#include <stdio.h> void Test_Demo( void ( *FUNC )( int a,int b),int x,int y ){ //int a = 1; //int b = 5; FUNC(x,y);} void func(int x,int y){ printf("%d\n",x+y); } int main(void){ Test_Demo(func,1,23); return 0;} 原文地址:https://www.cnblogs.co

SetTimer函数的用法

什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数 了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序.通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数. 1.1 用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 UINT_PTR SetTimer( HWND hWnd,          // 窗口句柄 UINT_PTR

c/c++:回调函数

1:函数名为指针 首先,在C语言中函数是一种function-to-pointer的方式,即对于一个函数,会将其自动转换成指针的类型.如: 1 #include<stdio.h> 2 3 void fun() 4 { 5 } 6 7 int main() 8 { 9 printf("%p %p %p\n", &fun, fun, *fun); 10 return 0; 11 } 这三个值的结果是一样的. 其实对于最后的那个*fun, 即使前面加上很多个*号, 其结果

回调函数以及钩子函数的概念

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统.每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权.这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递.对每种类型的钩子由系统来维护一个钩子链,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的先获得控制权.要实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,这个函数的原型是

Zookeeper C API 指南三(回调函数)(转)

2013-02-21 12:54 by Haippy, 9237 阅读, 0 评论, 收藏, 编辑 接上一篇<Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍)>,本文重点介绍 Zookeeper C API 中的各种回调函数. Zookeeper C API 中各种回调函数简介 在具体介绍 Zookeeper C API 之前,首先介绍一下 Zookeeper C API 中的各种回调函数的原型: 监视函数(watch function)原型 typede

C++领域回调函数总结&lt;一&gt; ---- 常见使用

简介: 回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过.普通的C++成员函数都隐含了一个传递函数作为参数,亦即"this"指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员.这也可以理解为什么C++类的多个实例可以共享成员函数但是确有不同的数据成员.由于this指针的作用,使得将一个CALLBACK型的成员

MFC 定时器 SetTimer 如何使用回调函数

创建工程名TestCallBack 自定义回调函数   定义为全局函数 在TestCallBackDlg.h文件开头定义 #pragma once void CALLBACK EXPORT TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime); 在TestCallBackDlg.cpp文件末尾实现函数 void CALLBACK EXPORT TimerProc(HWND hwnd,UINT message,UINT iTimerID