CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

100分急问 一个关于定时器的问题~

楼主hiphop(小风)2003-04-03 09:56:51 在 VC/MFC / 基础类 提问

我想在程序中安装定时器  
  然后到一段时间后   自动退出程序  
   
  算法:  
   
  安装定时器  
  do  
  {......}  
  while(时间没到)  
  退出程序  
   
  好用到什么函数   最好有类似代码参看~  
   
  100分不够   我加。。。  
   
  谢谢大家~ 问题点数:100、回复次数:10Top

1 楼ying369(荧荧)回复于 2003-04-03 09:59:10 得分 0

SendMessage(WM_CLOSE,0,0);Top

2 楼csdn_viking(努力赚钱中,苍天一定要保佑我多赚钱啊!)回复于 2003-04-03 10:04:35 得分 20

bool   g_bRun=true;//全局变量或成员函数  
  SetTimer(时间间隔,1);  
  do  
  {  
  ...  
  }while(g_bRun);  
   
  然后,用ClassWizard响应WM_TIMER消息,在函数里  
  g_bRun=false;Top

3 楼hiphop(小风)回复于 2003-04-03 10:07:10 得分 0

忘了说了   是非窗口的  
  所以没有WM_TIMERTop

4 楼philis(明天会更好)回复于 2003-04-03 10:07:52 得分 30

UINT   nTimerID;  
  nTimerID=SetTimer(1,1000,NULL);//注册timer  
  if   (0==nTimerID)  
  AfxMessageBox("Timer   Install   Error");  
   
  在OnTimer中加入SendMessage(WM_CLOSE,0,0);  
   
  在OnDestroy中加入KillTimer(1);  
  Top

5 楼zkwang1980(冬瓜)回复于 2003-04-03 10:13:37 得分 40

在Windows提供给我们使用的系统资源当    
   
  中,有一种称为“定时器(Timer)”的特殊资源,在申请了这类资源的程序当中每间隔    
   
  一段时间会接收到值为WM_TIMER的消息。需要定时执行的代码可以放在该消息的处理部    
   
  分。如果在VC中,我们可以具体按照以下步骤实现这一目的:    
   
  利用MFC   AppWizard创建一个标准的工程,接受所有缺省选项。名为s1    
   
  在Classview中选中“CMainFrame”类,然后按Ctrl+W激活ClassWizard,在“Message    
   
  Map”选项卡中Class   Name选“CMainFrame”,接着在“Message”中选“WM_TIMER”,    
   
  最后按下“Add   Funcation”。以上步骤加入了对WM_TIMER消息的映射处理。    
   
  回到Classview中,双击“OnCreate”成员函数,在函数的末尾添加申请Timer的语句:    
   
       
   
  SetTimer(100,1000,NULL);//申请一个标识值为100的Timer,定时间隔为1000毫秒(1秒    
   
  )。    
   
  在“Classview”中双击OnTimer函数,输入要定时实现的代码。本例子中为:    
   
  MessageBeep(1000);;//每隔一秒发出通告声    
   
  编译并执行之,我们可以每隔一秒就听到声音。这正是我们在OnTimer函数内要求执行的    
   
  。    
   
  实际当中,我们可以将“MessageBeep(1000);”换成任何我们想完成的任务,譬如定时    
   
  存盘等。    
   
  第二种方案也利用Timer资源,但却是采用已经编写好的代码   我们可以加入一个具有定    
   
  时功能的组件至当前工程当中。这种方法特别适用于基于对话框的工程。具体步骤如下    
   
  :    
   
  利用MFC   AppWizard创建一个基于对话框的工程,其余接受所有缺省选项。名为s2。    
   
  在ResourceView中,双击IDD_S2_DIALOG,显示对话框,将其中的“To   do:”改为“定时    
   
  触发演示的例子”,表明工程的作用。    
   
  右击对话框编辑区,在弹出的右键菜单中选择“Insert   ActiveX   Control”,从弹出的    
   
  列表框中选择“Timer   Object”,确定后会在对话框内出现一个Timer对象。    
   
  我们右击Timer对象,从弹出的菜单中选择“Properties”,接着选“All”选项卡,将    
   
  其中的Interval值设为5000,即每隔5秒发生一次Timer事件。    
   
  回到对话框编辑界面,双击Timer,产生一个CS2Dlg::OnTimerTimer1成员函数,接受缺    
   
  省值,并在函数实现部分输入:    
   
  MessageBox("定时触发消息框","定时演示"   ,MB_OK);    
   
  编译并运行此工程,将会在产生的对话框运行期间,每隔5秒弹出一个消息框。Top

6 楼hiphop(小风)回复于 2003-04-03 10:17:23 得分 0

if   (0==nTimerID)  
  是什么意思?  
   
  判断什么?Top

7 楼coyer(test)回复于 2003-04-03 10:28:06 得分 10

这种写法是一种个人写法。  
  如果写成nTimerID==0,很容易写成nTimerID=0,而反过来就不会有这种错误了。  
  nTimerID应该是指Timer的句柄,因为你的程序中可能有多个SetTimer(...).Top

8 楼librastar2001(天平)回复于 2003-04-03 10:51:31 得分 0

启线程,然后在定时器中关闭Top

9 楼csdn_viking(努力赚钱中,苍天一定要保佑我多赚钱啊!)回复于 2003-04-03 10:57:37 得分 0

无窗口也可以。  
  bool   g_bRun=true;//全局变量或成员函数  
  SetTimer(1,时间间隔,(TIMERPROC)OnTimer);  
  do  
  {  
  ...  
  }while(g_bRun);  
   
  void   CALLBACK   OnTimer(HWND   hwnd,   UINT   uMsg,   UINT_PTR   idEvent,   DWORD   dwTime)  
  {  
                    g_bRun=false;  
  }  
   
  具体的参数自己看MSDN搞定.Top

10 楼csdn_viking(努力赚钱中,苍天一定要保佑我多赚钱啊!)回复于 2003-04-03 10:58:58 得分 0

对了,在OnTimer()里加上KillTimer(1);Top

相关问题

  • 定时器问题求助。急!!!
  • 关于定时器的问题,急~~~
  • 定时器问题!!!
  • 定时器问题。。。。。。
  • 定时器问题...
  • 定时器问题
  • 定时器问题!!
  • 关于Win98下的定时器问题(一般计时器、多媒体定时器)?急!
  • 大家来帮帮忙,一个定时器的问题 急呀
  • 多媒体定时器和回调函数的问题,急!!

关键词

  • 函数
  • 代码
  • 间隔
  • 消息
  • 执行
  • 选择
  • ntimerid
  • 定时器
  • brun
  • 对话框

得分解答快速导航

  • 帖主:hiphop
  • csdn_viking
  • philis
  • zkwang1980
  • coyer

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo