MFC的定时器

能否在定时器里面又使用KillTimer来消除定时器作用? 注意不是在外部使用KillTimer,我知道在定时器外部使用KillTimer,我现在想知道的就是能否在Timer里面使用KillTimer?注意是里面。

第1个回答  2011-06-11
在/doc/">程序中我们经常要使用定时刷新的功能,典型的应用是在信息管理系统中表单要跟着数据库中的数据变动。MFC提供了定时器来完成这个功能。

在MFC中和定时器相关的有三个函数:

UINT SetTimer( UINT nIDEvent, UINT nElapse,

void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) );

afx_msg void OnTimer( UINT nIDEvent );

BOOL KillTimer( int nIDEvent );

参数说明:

UINT nIDEvent:定时器的ID,给定时器唯一的身份验证,如果在一个/doc/">程序中有多个定时器可以用这个ID来确定是那个定时器发送的消息。

UINT nElapse: 定义刷新时间,即间隔多长时间刷新一次,单位是毫秒。

void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD):

这个回调函数中实现刷新时所做的操作,如在数据库中读取数据。但是我们大多数时候不在这里实现,而是在OnTimer中。

函数功能:

SetTimer用来定义一个定时器的属性,如改定时器的ID,刷新时间,处理函数。

OnTimer实际时系统定义消息用来响应WM_TIMER消息,在这里可以实现对多定时器中的各个定时器分别响应,这里才时定时/doc/">程序大展宏图的地方。 字串2

KillTimer用来结束一个定时器。 字串1

下面我们用一个例子来说明定时器的使用:

这个例子用来实现一个简单的功能,就是在一个单/doc/">文档/doc/">程序中,每间隔5秒弹出一个消息框提示“定时器1”,每隔7秒弹出一个消息框提示“定时器2”。

建立单/doc/">文档/doc/">程序略,一路Next。

(1)在resource.h中定义两个定时器的ID

#define IDTIMER1 1

#define IDTIMER2 2

(2)在CMainFrame的OnCreate函数中定义两个定时器的属性。

SetTimer(TIMEID1,5000,0);

SetTimer(TIMEID2,7000,0);

(3) CMainFrame中对WM_TIMER进行响应。

void CMainFrame::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

switch(nIDEvent) {

case TIMEID1:

{

AfxMessageBox("定时器1!");

break;

} 字串1

case TIMEID2:

{

AfxMessageBox("定时器2!");

break;

}

default:

;

}

CFrameWnd::OnTimer(nIDEvent);

}

(4)在CMainFrame的析构函数中添加

KillTimer(IDTIMER1);

KillTimer(IDTIMER2);
第2个回答  2011-06-07

在/doc/">程序中我们经常要使用定时刷新的功能,典型的应用是在信息管理系统中表单要跟着数据库中的数据变动。MFC提供了定时器来完成这个功能。

在MFC中和定时器相关的有三个函数:

UINT SetTimer( UINT nIDEvent, UINT nElapse,

void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) );

afx_msg void OnTimer( UINT nIDEvent );

BOOL KillTimer( int nIDEvent );

参数说明:

UINT nIDEvent:定时器的ID,给定时器唯一的身份验证,如果在一个/doc/">程序中有多个定时器可以用这个ID来确定是那个定时器发送的消息。

UINT nElapse: 定义刷新时间,即间隔多长时间刷新一次,单位是毫秒。

void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD):

这个回调函数中实现刷新时所做的操作,如在数据库中读取数据。但是我们大多数时候不在这里实现,而是在OnTimer中。

函数功能:

SetTimer用来定义一个定时器的属性,如改定时器的ID,刷新时间,处理函数。

OnTimer实际时系统定义消息用来响应WM_TIMER消息,在这里可以实现对多定时器中的各个定时器分别响应,这里才时定时/doc/">程序大展宏图的地方。 字串2

KillTimer用来结束一个定时器。 字串1

下面我们用一个例子来说明定时器的使用:

这个例子用来实现一个简单的功能,就是在一个单/doc/">文档/doc/">程序中,每间隔5秒弹出一个消息框提示“定时器1”,每隔7秒弹出一个消息框提示“定时器2”。

建立单/doc/">文档/doc/">程序略,一路Next。

(1)在resource.h中定义两个定时器的ID

#define IDTIMER1 1

#define IDTIMER2 2

(2)在CMainFrame的OnCreate函数中定义两个定时器的属性。

SetTimer(TIMEID1,5000,0);

SetTimer(TIMEID2,7000,0);

(3) CMainFrame中对WM_TIMER进行响应。

void CMainFrame::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

switch(nIDEvent) {

case TIMEID1:

{

AfxMessageBox("定时器1!");

break;

} 字串1

case TIMEID2:

{

AfxMessageBox("定时器2!");

break;

}

default:

;

}

CFrameWnd::OnTimer(nIDEvent);

}

(4)在CMainFrame的析构函数中添加

KillTimer(IDTIMER1);

KillTimer(IDTIMER2);
第3个回答  2011-06-06
可以在里面设置的,满足了你的条件后,就执行killtimer(id),id是你需要消除的定时器,之前settimer的id
第4个回答  2011-06-06
可以。本回答被提问者采纳

TimerMFC Timer定时器
首先,启动定时器。使用CWnd::SetTimer函数,其原型如下:cpp UINT_PTR SetTimer(UINT_PTR nIDEvent,UINT nElapse,void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD));其中,nIDEvent是定时器的唯一标识,nElapse是时间间隔(毫秒),lpfnTimer是可选的回调函数地址。若lpfnTimer为NULL,定时器...

MFC框架与QT框架定时器使用及不同
讲解MFC框架与Qt框架下的定时器使用及不同,首先从基础概念出发,定时器在编程中的作用是告诉操作系统在指定的时间间隔后周期性触发程序,实现定期任务的执行。在MFC框架下,定时器通过WM_TIMER消息机制来实现,使用SetTimer函数设置定时器,参数包括定时器的编号、触发时间间隔和通常为NULL的附加参数。在Qt框...

[MFC]如何修改定时器间隔?
定时器无法修改间隔,因此只能:KillTimer(1);SetTimer(1,1000,NULL);\/\/重新设置

MFC的定时器
void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD) );afx_msg void OnTimer( UINT nIDEvent );BOOL KillTimer( int nIDEvent );参数说明:UINT nIDEvent:定时器的ID,给定时器唯一的身份验证,如果在一个\/doc\/">程序中有多个定时器可以用这个ID来确定是那个定时器发送的消息。UINT ...

MFC 定时器请求帮忙
1)在对话框初始化函数(OnInit...)中设置定时器:BOOL CXXXDlg::OnInitDialog(){ ...SetTimer(3434,1000(1秒),NULL);} 在定时器处理函数中计时:void CXXXDlg::OnTimer(UINT nIDEvent){ \/\/定义类成员变量计时:。。。\/\/完毕后关闭定时器:KillTimer(3434);} C++学习,可以到我的百度空...

MFC案例--计时器
MFC中的计时器功能通过OnTimer()函数与SetTimer()和KillTimer()函数的巧妙配合实现,SetTimer()是启动定时器的标志,而KillTimer()则是停止定时器的指令。以下是实现计时器功能的步骤:首先,通过右键点击控件并选择【类向导】,为消息处理添加WM_TIMER事件,然后点击【添加处理程序】,进入【编辑代码】阶段。

settimer 怎么用
MFC中的定时器大致分为4个步骤:1.在需要添加定时器的类名上右键选择Add Windows Message Handler,然后添加相应消息WM_TIMER.2.在程序中需要启动计时器的地方 UINT SetTimer(UINT nIDEvent,UINT nElapse,void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );第一个参数为定时器id,第二...

vs2013中mfc怎么用定时器
MFC触发定时器可以用函数SetTimer完成。SetTimer函数有三个参数。第一个参数是一个整数,指示该定时器的编号(标识)。第二个参数也是一个整数,表示定时器消息的发送间隔(单位毫秒)。第三个参数是回调函数指针,通常为NULL。SetTimer之后,程序会按照指定的时间间隔发送定时器消息。要想停止该定时器,用...

MFC中的多媒体定时器使用
timeGetDevCaps(&timeCaps,sizeof(timeCaps));m_iPeriodMin= timeCaps.wPeriodMin;\/\/ 开启计时器 timeBeginPeriod(m_iPeriodMin);\/\/ 设置计时器的事件 m_nTimerID= timeSetEvent(m_iPeriodMin,m_iPeriodMin,(LPTIMECALLBACK)OnJTimer,(DWORD)this,TIME_PERIODIC);\/\/ 停止计时器 timeEndPeriod(m_...

MFC中定时器的准确性问题, 我设置每50ms运行一次, 但是用clock计时竟...
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率, 然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。其定时误差不超过1微秒,精度与CPU等机器配置有关。一般精度越高的,占用的...

相似回答
大家正在搜