100分急问 一个关于定时器的问题~
我想在程序中安装定时器
然后到一段时间后 自动退出程序
算法:
安装定时器
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




