资源描述:
《vc++中使用定时器的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.启用一个定时器直接调用函数:SetTimer(1,500,NULL);//定义时钟1,时间间隔为500msSetTimer(2,1000,NULL);//定义时钟2,时间间隔为1000ms可以在按钮按下时启用定时器:voidCTimeDlg::OnButton1(){//TODO:AddyourcontrolnotificationhandlercodehereSetTimer(1,500,NULL);//定义时钟1,时间间隔为500msSetTimer(2,1000,NULL);//定义时钟2,时间间隔为1000ms}2.关闭定时器:可以在按钮中调用如下函
2、数关闭某定时器:voidCTimeDlg::OnButton2(){//TODO:AddyourcontrolnotificationhandlercodehereKillTimer(1);//关闭1号定时器KillTimer(2);//关闭2号定时器}3.添加定时器时间到的处理代码:1)在开发界面中Ctrl+W进入MFCclasswizard页面2)选择MessageMaps选项卡3)在Project中选择你的工程4)在objectIds:中选择C…..Dlg1)在Messages:中选择WM_TIMER,此时,Memberfunctions中自动定位到:WO
3、nTimerON_WM_TIMER,6)单击EDITcode(或双击WOnTimerON_WM_TIMER)自动进入如下函数:voidCTimeDlg::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefaultswitch(nIDEvent){case1://1号定时器应该处理的事情//…..break;case2://2号定时器应该处理的事情//…..break;}CDialog::OnTimer(nIDEvent);//此句VC自动生成}秘密在VC中,定时有三种方法
4、,一是利用WM_TIMER消息的API函数,二是使用多媒体定时器,三是多线程定时器(不知道是不是可以这样分啊)。 1、WM_TIMERSetTimer函数是用来设立一个定时器,SetTimer函数的原型如下:UINT_PTRSetTimer(HWNDhWnd, //窗口句柄UINT_PTRnIDEvent, //定时器IDUINTuElapse, //时间间隔,单位为毫秒TIMERPROClpTimerFunc //回调函数); 第一个参数是窗口句柄,在MFC中,SetTimer函数被封装在CWnd类中,调用时不用指出窗口句柄;第二个
5、参数是定时器ID,在启用多个定时器时,用来标识各个不同的定时器,在不使用MFC的情况下,当接收到WM_TIMER消息时,WPARAMwParam就是这个ID(API的东西,都忘得差不多了,-_-);第三个参数为时间间隔,也就是回调函数的调用周期,单位是毫秒;第四个参数是回调函数,当设为NULL时,调用系统默认的回调函数。这个默认的回调函数是OnTimer,可以在需要定时器的类中添加,添加时只要在ClassWizard里添加WM_TIMER的消息映射就可以了。 函数的返回值为定时器ID。 这个函数的使用有点像定时器中断,SetTimer就是开中断,回调函数就是中断
6、子程,既然有开中断就一定要有关中断,在VC里面用KillTimer来取消定时器。 KillTimer函数的原型如下:BOOLKillTimer( HWNDhWnd, //窗口句柄 UINT_PTRuIDEvent //ID); 与SetTimer一样,当在MFC中使用时,不用指定窗口句柄。正确取消定时器则返回true,否则返回false. 前面说到SetTimer第四个参数为回调函数,不设为NULL时,它就是一个回调函数的地址。回调函数格式如下:voidCALLBACKTimerProc(HWNDhWnd,UINTnMsg,UINTnT
7、imerid,DWORDdwTime);第一个参数是窗口句柄,第二个是消息,第三个是定时器ID,必须与SetTimer中的一致,最后一个是回调函数中要使用的参数。 例:SetTimer(1,1000,NULL);SetTimer(2,2000,NULL);//这样产生了两个定时器,我们在OnTimer函数中对两个不同的定时器作不同的处理voidC****::OnTimer(UINTnIDEvent){ switch(nIDEvent) { case1: Timer1Proc(); break; case2: Timer2Proc(); break; }}
8、//当使用回调函数时(上