MFC中的setTimer()函数

请各位大侠指点一下:
我在MFC中用了一个对话框,但点击确定按钮的时候,设定一个定时器,它的作用是在界面上显示倒计时,接着我有调用了一个函数(此函数是仿真里面的函数,不妨碍您理解),我的问题是:为什么点击确定的时候先执行仿真函数,执行完了后才执行屏幕显示,不知道为什么会这样?是要用多线程吗?还是有其余的解决办法,希望哪位高手赐教,不胜感激!
SetTimer(1,100,NULL);
ConAmb.TimeAdvance();

应为SetTimer的后,过100ms才收到WM_TIMER的消息,开始显示倒计时;
而仿真函数在SetTimer后就立即执行了,所以是先执行了仿真函数,100ms后执行倒计时。
你把仿真函数放到WM_TIMER的消息函数中就可以了。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-14
  MFC SetTimer函数的用法
  1) 函数原型及变形

  SetTimer这个API函数的原型 :
  UINT_PTR SetTimer(
  HWND hWnd, // 窗口句柄
  UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
  UINT uElapse, // 时间间隔,单位为毫秒
  TIMERPROC lpTimerFunc // 回调函数
  );
  注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
  回调函数:在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。
  例如 :
  SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
  在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了
  于是SetTimer函数的原型变为:

  UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)) ,用法如:SetTimer(1,1000,NULL);
第2个回答  2010-05-23
顶我楼上的,他回答的很清楚了

MFC中的setTimer()函数
应为SetTimer的后,过100ms才收到WM_TIMER的消息,开始显示倒计时;而仿真函数在SetTimer后就立即执行了,所以是先执行了仿真函数,100ms后执行倒计时。你把仿真函数放到WM_TIMER的消息函数中就可以了。

MFC案例--计时器
在程序设计中,MFC案例中的计时器功能通过OnTimer()、SetTimer()和KillTimer()函数实现,它们相互配合,完成实时控制任务。SetTimer()函数是计时器开始标志,而KillTimer()是计时器结束标志。若要使用计时器功能,操作步骤如下:首先,右键点击任意控件,选择“类向导”,设置类名,添加消息处理程序,并选择...

SetTimerSetTimer函数的用法
`lpTimerFunc`:回调函数的地址,用于执行定时器触发时的代码。如果为`NULL`,则使用系统默认的回调函数。例如,设置一个1秒触发一次的定时器的代码如下:cppSetTimer(m_hWnd, 1, 1000, NULL);在MFC程序中,创建定时器的操作被封装在CWnd类中,因此可以直接使用`SetTimer`方法:cppUINT SetTimer(UINT n...

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中 SetTimer() 和 KillTimer() 的使用
在函数OnMouseMove中添加代码:mouse_distance = sqrt((point.x - 200)*(point.x - 200) + (point.y - 200)*(point.y - 200));if(mouse_distance <= 250){ \/*这里的1是Timer的标识,最好设置为WM_USER+一个常数,避免与程序的其他标识冲突*\/ SetTimer(1,-3.96 * mouse_distance +...

请问各位大侠: VS 2008 MFC中我想设置两个timer,该怎么弄? 小弟谢过...
在事件处理程序中,使用SetTimer()函数即可搞定。其原型如下:UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse, void lpfnTimer);第一个参数用来指定Timer的标识符,可以直接是数字,也可以是Resource.h中预先定义的符号;第二个参数指定该Timer的激活间隔,单位是毫秒;第三个参数是个函数指针,用来...

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

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

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,给定时器唯一的身份验证,如果在...

SetTimer()用法
MFC中的SetTimer CWnd::SetTimer UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );Return Value The timer identifier of the new timer if the function is successful. An application passes this value to the KillTimer member ...

相似回答