windows 定时执行回调函数(CC++)

windows 定时执行回调函数(CC++),第1张

用于需要定时执行 *** 作的程序,WINAPI的程序;

1、设置定时事件

MMRESULT timeSetEvent( UINT uDelay ,

                                                 UINT uResolution ,

                                                 LPTIMECALLBACK fptc ,

         旅宽                                        DWORD dwUser ,

                                                 UINT fuEvent )

uDelay:以毫秒指定事件的周期。

uResolution :以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。

fptc :指向一个回调函数

dwUser :存放用户提供的回调数据。

fuEvent :指定定时器事件类型:搭孝

                TIME_ONESHOT:uDelay毫秒后只产生一次事件

                TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。

2、注销定时事件

MMRESULT timeKillEvent(UINT uTimerID)

其中uTimerID是timeSetEvent的返回值,是事件的ID号,timeSetEvent必须返回ID号用于注销;

3、回调函数

void WINAPI fptc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)

{

             //需要执行的 *** 作

}

回调的参数如不需要用到可不管,但是函数定义的参数类型和数量必须按照这个格式;

使用方法:

1、头文件和库必须加载

#include <Windows.h>

#include <Mmsystem.h>

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

2、注册回调事件

MMRESULT timer_id

timer_id = timeSetEvent(1000, 1, (LPTIMECALLBACK)TimeCallbackFuction, 1, TIME_PERIODIC)

其中,1000表示1秒;1表示精度为1毫秒;TimeCallbackFuction是回调函数,定时执行的程序写在里面;1是用户数据,这里我没用到,随便写了个;TIME_PERIODIC表示间隔知镇稿前面设定的那个时间不断循环执行;

3、回调函数执行

void WINAPI TimeCallbackFuction(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)

{

              //需要执行的 *** 作

}

回调函数里写你的 *** 作;

4、最后不需要使用定时器时需要注销掉;

timeKillEvent(timer_id)

timer_id是前面创建获取的ID号;

首先做一个形象的比喻:,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机是我通知你的手段,它就是回叫函数,也叫回调函数.回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,禅宴除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中d出。理解回调函数程序在调用一个函数(function)时(通常指api).相当于程序(program)呼叫(Call)了一个函数(function)关系表示如下:call(调用)program --------------------→ dll程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数).需要回调函数的 DLL 函数往往是一些必须重复执行某些 *** 作的函数.关系表示如下:call(调用)program --------------------→ dll↑ ¦¦_______________________________¦callback(回调)当你调用的函数在传递返回值给回调函数时,你就可以利用回调函数来处理或完成一定的 *** 作。至于如何定义自己的回调函数,跟具体使用的API函数有关,很多不同类别的回调函数有各种各样的参数,有关这些参数的描述一般在帮助中有说明回调函数的参数和返回值等.其实简单说回调函数就是你所写的函数满足一定条件后,被DLL调用!也有这样的说法(比较容易理解):回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:1. 声明;2. 定义;3. 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。NET Framework 开发人员指南回调函数是托管应用程序中可帮助非托管 DLL 函数完成任务的代码。对回调函数的调用将从托管应用程序中,通过一个 DLL 函数,间接地传递给托管实现。在用平台调用调用的多种 DLL 函数中,有些函数要求正确地运行托管代码中的回调函数。回调函数和实现要从托管代码中调用大多数 DLL 函数,可创建该函数的托管定义,然后调用该函数。此过程比较直接。要使用需要回调函数的 DLL 函数,则会有一些附加的步骤。首先,必须在文档中查滑袭销阅该函数,确定该函数是否需要回调。接着,必须在托管应用程序中创建回调函数。最后,调用该 DLL 函数,并将指向回调函数的指针当作参数进行传递。右图总结了这些步骤。回调函数非常信游适合在重复执行任务的情况下使用。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12492993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存