MFC定时器使用
定时函数的应用综述
定时函数的应用综述
当我们在衡量一个函数的运行时间,或者是判断一个算法的时间效率,或者在程序中我们需要一个定时器来定时执行一个特定的操作,如闹铃、时钟、多媒体、游戏动画等,都要用到时间函数。
编译器和时间函数为我们提供了很多时间函数,而这些函数的精度和用法也是各不相同的。
下面我们就对几种常见的定时函数进行比较、详述:
小结:以上提到的9种时间函数,由于他们的用处不同,其精度也有很大的差异,用户可以根据不同的需求选择合适的时间函数。
本文原始资料来源于网络,经个人加工形成,有些函数由于没有经过自己的测试,资料不一定准确,在选择了具体的函数之后,使用时尚须查阅该函数具体的资料。
我在程序中使用过的函数举例:
1:Sleep(1000)
//延时1s,多用于多线程程序中,如果在单个线程的程序中使用,有类似死机现象。
2、Timer事件:
该函数使用比较简单,但由于其精度与系统繁忙程度有关,在不需精确定时的场合应用非常好用,但如果需要精确定时,建议不要使用;
(1)定时setTimer(1,1000,NULL)//为定时器一设置一个1秒的周期
(2)在应用程序中添加OnTime()
{
CDC * pDC;
pDC->TextOut(100,100,“This is a test!”);
}//消息响应函数,在该函数中处理你想有响应的事件。
MFC onTime函数使用
MFC onTime函数使用你需要在需要计时器的类的生成onTime函数:在ClassWizard里,选择需要计时器的类,添加WM_TIMER消息映射,就自动生成OnTime函数了。
介绍如下:总的来说, 这里面一共需要三个函数:SetTimer, KillTimer()和OnTimer().先请看SetTimer这个API函数的原型UINT_PTR SetTimer(HWND hWnd,// 窗口句柄UINT_PTR nIDEvent,// 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器UINT uElapse,// 时间间隔,单位为毫秒TIMERPROC lpTimerFunc// 回调函数);例如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函数的时候,就会生成一个计时器。
函数中nIDEvent指的是计时器的标识,也就是名字。
nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。
第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。
这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。
然后在函数里添加代码,让代码实现功能。
每隔一段时间就会自动执行一次。
例:SetTimer(1,1000,NULL);1:计时器的名称;1000:时间间隔,单位是毫秒;NULL:使用onTime函数。
MFC中的SetTimer、ON_WM_TIME
SetTimer(1,1000,NULL);//启动定时器1,定时时间是1秒 }
SetTimer(1,1000,(TIMERPROC)TimerProc);//用回调函数处理,此时对话框的消息处理函数不再处理。 }
void CTestDlg::OnButtonStop() {
KillTimer(1); //关闭定时器1。 }
void CTestDlg::OnTimer(UINT nIDEvent) { switch(nIDEvent) { case 1:
static int nTimer=0; CString strTmp=""; strTmp.Foimer++); CWnd *pWnd=GetDlgItem(IDC_STATIC_TIME); pWnd->SetWindowText(strTmp); 将Lable中设置新值,表明定时器已经工作。 break;
default: break;
} CDialog::OnTimer(nIDEvent);
}
回调函数的使用。 如果不想使用窗体的WM_TIMER消息函数处理,可以使用回调函数来取代,读者可以在上面例子的基础 上,增加一个回调函数,以证实前面的讨论。 首先,定义一个回调函数,回调函数的定义必须按照如下格式。 void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime );
mfc 定时器用法
mfc 定时器用法
MFC定时器可以让程序在固定的时间间隔内执行某个任务或事件,使用起来非常方便。
下面是如何使用 MFC 定时器的步骤:
1. 在 MFC 应用程序的主窗口类中添加定时器成员变量:
UINT_PTR m_nTimerID;
2. 在 OnInitDialog 中初始化定时器:
m_nTimerID = SetTimer(1, 1000, NULL);
其中,1 表示定时器 ID,1000 表示定时器触发时间间隔(单位为毫秒),NULL 表示定时器消息处理函数为主窗口类的 OnTimer 函数。
3. 在主窗口类中添加 OnTimer 函数:
void CMyAppDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == m_nTimerID)
{
// TODO: 在此处添加定时器任务代码
}
CDialog::OnTimer(nIDEvent);
}
其中,nIDEvent 表示定时器 ID,用于区分不同的定时器事件。
4. 在 OnClose 函数中销毁定时器:
KillTimer(m_nTimerID);
这样,当主窗口关闭时,定时器也会被销毁。
总之,MFC 定时器使用起来非常简单,只需要在程序中添加定时器成员变量、初始化定时器、编写定时器任务代码和销毁定时器即可。
利用定时器和双缓冲技术在MFC中绘制动画
文 章编 号: 1 0 0 7 - 9 4 1 6 ( 2 0 1 3 ) 0 8 — 0 1 2 9 一 O 1
个“ 动画 ” 菜单项 , 设置好对应 的I D。 第二步 , 向Chu i t u Vi e w类 中添 加一 个布 尔型 成员 变量 MFC 是微软公司推 出的软件开发架 构[ 1 l , 在MF C中绘 制动画 o n g h u a l f a g, 用 于表示是否显示动 画。 常见于各类软件 开发。 动 画绘制一种思路是利用循环语句加延迟函 d 第三 步 , 利用类向导创 建对 “ 动画” 菜单 项的响应 函数 。 该 函数 数 的方式[ 2 】 , 另外一种 思路就是利用定 时器口 1 定时更像 图片绘制动 的内容很 简单 , 如下所示 。 画。 后者在绘 制过程 中可 以响应其他事件 , 因此 应用十分广泛 。 i f ( d o n g h u a l f a g = = t r u e ) { 1 . 1定 时器技 术
渗
_ 十 r 黪
f 敦字 技 术
设 计 开 发
利用定时器和双缓冲技术在 MF C中绘制动画
杜 小 甫
( 沈 阳城 市建设 学 院信 息 与控 制 工程 系 辽 宁沈 阳 1 1 0 1 6 7 )
摘 要: 对MF c中动 画绘制 涉及 到的 两个 重要技 术做 较全 面 的总结 和提 炼, 创 建 了一个通 用性 较 强的动 画绘制程 序框 架 。 首先 对MF C'  ̄定时 器 技 术和 双 缓冲技 术做 出深入 分析; 其 次创 建 一 个动 画绘制 程序 框 架; 最后 通过 几 个动 画程序验 证 该框 架 。 该程 序框 架 已经应 用在 实际工作 中, 证 明 该框 架是 精 炼有 效 g =f a l s e I
C#中的三种定时计时器Timer用法介绍
C#中的三种定时计时器Timer⽤法介绍在.NET中有三种计时器:1、System.Windows.Forms命名空间下的Timer控件,它直接继承⾃Componet。
Timer控件只有绑定了Tick事件和设置Enabled=True后才会⾃动计时,停⽌计时可以⽤Stop()⽅法控制,通过Stop()停⽌之后,如果想重新计时,可以⽤Start()⽅法来启动计时器。
Timer控件和它所在的Form属于同⼀个线程;2、System.Timers命名空间下的Timer类。
System.Timers.Timer类:定义⼀个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()⽅法来启动计时,通过Stop()⽅法或者Enable=false停⽌计时。
AutoReset属性设置是否重复计时(设置为false只执⾏⼀次,设置为true可以多次执⾏)。
Elapsed事件绑定相当于另开了⼀个线程,也就是说在Elapsed绑定的事件⾥不能访问其它线程⾥的控件(需要定义委托,通过Invoke调⽤委托访问其它线程⾥⾯的控件)。
3、System.Threading.Timer类。
定义该类时,通过构造函数进⾏初始化。
在上⾯所述的三种计时器中,第⼀种计时器和它所在的Form处于同⼀个线程,因此执⾏的效率不⾼;⽽第⼆种和第三种计时器执⾏的⽅法都是新开⼀个线程,所以执⾏效率⽐第⼀种计时器要好,因此在选择计时器时,建议使⽤第⼆种和第三种。
下⾯是三种定时器使⽤的例⼦:1、Timer控件设计界⾯:后台代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace TimerDemo{public partial class FrmMain : Form{//定义全局变量public int currentCount = 0;public FrmMain(){InitializeComponent();}private void FrmMain_Load(object sender, EventArgs e){//设置Timer控件可⽤this.timer.Enabled = true;//设置时间间隔(毫秒为单位)this.timer.Interval = 1000;}private void timer_Tick(object sender, EventArgs e){currentCount += 1;this.txt_Count.Text = currentCount.ToString().Trim();}private void btn_Start_Click(object sender, EventArgs e) {//开始计时this.timer.Start();}private void btn_Stop_Click(object sender, EventArgs e) {//停⽌计时this.timer.Stop();}}}2、System.Timers.Timer设计界⾯:后台代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace TimersTimer{public partial class FrmMain : Form{//定义全局变量public int currentCount = 0;//定义Timer类System.Timers.Timer timer;//定义委托public delegate void SetControlValue(string value);public FrmMain(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e) {InitTimer();}/// <summary>/// 初始化Timer控件/// </summary>private void InitTimer(){//设置定时间隔(毫秒为单位)int interval = 1000;timer = new System.Timers.Timer(interval);//设置执⾏⼀次(false)还是⼀直执⾏(true)timer.AutoReset = true;//设置是否执⾏System.Timers.Timer.Elapsed事件timer.Enabled = true;//绑定Elapsed事件timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerUp);}/// <summary>/// Timer类执⾏定时到点事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void TimerUp(object sender, System.Timers.ElapsedEventArgs e){try{currentCount += 1;this.Invoke(new SetControlValue(SetTextBoxText),currentCount.ToString()); }catch (Exception ex){MessageBox.Show("执⾏定时到点事件失败:" + ex.Message);}}/// <summary>/// 设置⽂本框的值/// </summary>/// <param name="strValue"></param>private void SetTextBoxText(string strValue){this.txt_Count.Text = this.currentCount.ToString().Trim();}private void btn_Start_Click(object sender, EventArgs e){timer.Start();}private void btn_Stop_Click(object sender, EventArgs e){timer.Stop();}}}3、System.Threading.Timer设计界⾯:后台代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;namespace Threading.Timer{public partial class FrmMain : Form{//定义全局变量public int currentCount = 0;//定义Timer类System.Threading.Timer threadTimer;//定义委托public delegate void SetControlValue(object value);public FrmMain(){InitializeComponent();}private void FrmMain_Load(object sender, EventArgs e){InitTimer();}/// <summary>/// 初始化Timer类/// </summary>private void InitTimer(){threadTimer = new System.Threading.Timer(new TimerCallback(TimerUp), null, Timeout.Infinite, 1000);}/// <summary>/// 定时到点执⾏的事件/// </summary>/// <param name="value"></param>private void TimerUp(object value){currentCount += 1;this.Invoke(new SetControlValue(SetTextBoxValue), currentCount);}/// <summary>/// 给⽂本框赋值/// </summary>/// <param name="value"></param>private void SetTextBoxValue(object value){this.txt_Count.Text = value.ToString();}/// <summary>/// 开始/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_Start_Click(object sender, EventArgs e){//⽴即开始计时,时间间隔1000毫秒threadTimer.Change(0, 1000);}/// <summary>/// 停⽌/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_Stop_Click(object sender, EventArgs e){//停⽌计时threadTimer.Change(Timeout.Infinite, 1000);}}}代码下载链接:到此这篇关于C#中的三种定时计时器Timer⽤法的⽂章就介绍到这了。
定时函数的应用综述
定时函数的应用综述
当我们在衡量一个函数的运行时间,或者是判断一个算法的时间效率,或者在程序中我们需要一个定时器来定时执行一个特定的操作,如闹铃、时钟、多媒体、游戏动画等,都要用到时间函数。
编译器和时间函数为我们提供了很多时间函数,而这些函数的精度和用法也是各不相同的。
下面我们就对几种常见的定时函数进行比较、详述:
小结:以上提到的9种时间函数,由于他们的用处不同,其精度也有很大的差异,用户可以根据不同的需求选择合适的时间函数。
本文原始资料来源于网络,经个人加工形成,有些函数由于没有经过自己的测试,资料不一定准确,在选择了具体的函数之后,使用时尚须查阅该函数具体的资料。
我在程序中使用过的函数举例: 1:Sleep(1000)
//
延时1s ,多用于多线程程序中,如果在单个线程的程序中使用,有类似死机现象。
2、Timer 事件:
该函数使用比较简单,但由于其精度与系统繁忙程度有关,在不需精确定时的场合应用非常好用,但如果需要精确定时,建议不要使用;
(1) 定时 setTimer(1,1000,NULL)//为定时器一设置一个1秒的周期 (2) 在应用程序中添加OnTime() {
CDC * pDC;
pDC->TextOut(100,100,“This is a test!”);
}//消息响应函数,在该函数中处理你想有响应的事件。
3、TimeSetEvent()函数。
MFC 定时器用法
下面这段代码的主要功能是设置两个时钟定时器,一个间隔是1ms,一个间隔是2s。每执行一次,把当前系统时钟值输入文件“cure.out”中,以比较该定时器的精确度。
//定义1ms和2s时钟间隔,以ms为单位
# define ONE_MILLI_SECOND 1
1、SetTimer定义在那里?
SetTimer表示的是定义个定时器。根据定义指定的窗口,在指定的窗口(CWnd)中实现OnTimer事件,这样,就可以相应事件了。
SetTimer有两个函数。一个是全局的函数::SetTimer()
UINT SetTimer(
Specifies the address of the application-supplied
TimerProc
Байду номын сангаас
callback function that processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by the CWnd object。
uDelay:延迟时间;
uResolution:时间精度,在Windows中缺省值为1ms;
lpFunction:回调函数,为用户自定义函数,定时调用;
dwUser:用户参数;
uFlags:标志参数;
TIME_ONESHOT:执行一次;
#define IDTIMER1 1
#define IDTIMER2 2
(2)在CMainFrame的OnCreate函数中定义两个定时器的属性。
MFC控件使用方法
MFC控件使用方法VC2012下MFC程序各控件的常用方法分类:vc控件2013-02-16 16:32 94人阅读评论(0) 收藏举报一下控件的用法全部在VC2012下调试通过,特发文收藏(部分内容来自或参考自网络):Static Text:将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性:GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd");设置字体:CFont *pFont= new CFont;pFont->CreatePointFont(120,_T("华文行楷"));GetDlgItem(IDC_XX)->SetFont(pFont);Edit Control:设置文本:SetDlgItemT ext(IDC_XX,L"iuewurebfdjf");获取所有输入:建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。
UpdateData(true);GetDlgItem(IDC_XX)->SetWindowText(shuru1);第一句更新所有建立了变量的对话框组件,获取输入的值。
第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。
若类型选用control:1.设置只读属性:shuru1.SetReadOnly(true);2.判断edit中光标状态并得到选中内容(richedit同样适用)int nStart,nEnd;CString strTemp;shuru1.GetSel(nStart,nEnd);if(nStart== nEnd){strTemp.Format(_T("光标在%d" ),nStart);AfxMessageBox(strTemp);}else{//得到edit选中的内容shuru1.GetWindowText(strTemp);strTemp= strTemp.Mid(nStart,nEnd-nStart);AfxMessageBox(strTemp);}其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。
mfc延时函数
mfc延时函数MFC(Microsoft Foundation Class)是在Windows平台下编写应用程序的一种基础类库。
在MFC中,我们常常需要使用延时函数来控制程序运行的时间,以此达到某些特定的目的。
本文将从三个方面来讲述MFC延时函数的使用。
一、Sleep函数Sleep函数是Windows系统提供的一种延时函数,也是MFC中最常用的延时函数之一。
它的参数为等待时间,单位为毫秒。
可以通过Sleep 函数来实现持续一定时间的等待。
例如,我们可以通过以下代码来实现等待1秒钟的功能:```Sleep(1000);```其中1000表示等待时间为1000毫秒(即1秒钟)。
需要注意的是,Sleep函数会将当前线程挂起,也就是说,当前线程将无法执行其他操作,直到延时时间结束才会被重新唤醒。
二、OnTimer函数OnTimer函数是MFC消息机制中一个比较常用的函数,它可以实现定时器的功能。
通过定时器,我们可以实现在一定时间段内反复执行某些操作,例如定时更新UI界面、定时采集传感器数据等等。
要实现定时器功能,我们需要在MFC消息函数中添加以下代码:```SetTimer(nIDEvent, nElapse, NULL);```其中nIDEvent为定时器ID,nElapse为定时周期,单位为毫秒,NULL 为定时器处理函数,如果不需要处理函数可以传入NULL。
接下来,我们需要在消息函数中添加以下代码:```void CDialogExExampleDlg::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值if (nIDEvent == 1) //定时器ID{//定时器处理函数内容}CDialogEx::OnTimer(nIDEvent);```其中,OnTimer函数中nIDEvent为定时器ID,需要与SetTimer函数中的nIDEvent对应,以便程序能够识别定时器并执行相应的操作。
MFC编程总结各种控件使用说明
MFC各种控件的使用说明把整数显示为时间格式的方法:Int minute=5; int sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);定时器的使用方法:在函数BOOL CDingshiqiDlg::OnInitDialog(){SetTimer(1,1000,NULL);}添加语句SetTimer(1,1000,NULL);定时器1秒钟中断一次.然后添加消息WM_TIMER对应的消息函数:void CDingshiqiDlg::OnTimer(UINT nIDEvent){}播放系统声音的方法:在头文件添加这两句#include<mmsystem.h>#pragma comment (lib,"winmm.lib")然后调用函数: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);VC++6.0控件工具箱:2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)3 静态文本(Static Text):MFC提供了CStatic类支持静态控件。
(1)更改该控件上字体的方法是:该控件的ID为IDC_STATIC1,IDC_STATIC2.CFont * f1;f1 = new CFont;f1 -> CreateFont( 25 , // nHeight15, // nWidth0 , // nEscapement0 , // nOrientationFW_BOLD, // nWeightFALSE , // TRUEbItalicFALSE, // bUnderline0 , // cStrikeOutDEFAULT_CHARSET, //ANSI_CHARSET nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T( " 宋体" )); // lpszFacGetDlgItem(IDC_STATIC1)-> SetFont(f1);GetDlgItem(IDC_STATIC2)-> SetFont(f1);另一种改变字体大小的方法: 在函数外定义CStatic m_static;CFont font;m_static.SubclassDlgItem(IDC_STAT_DIS,this);LOGFONT log;GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);log.lfHeight=300; //改log.lfWidth=120; //改log.lfCharSet=GB2312_CHARSET;lstrcpy(log.lfFaceName, _T("宋体"));font.CreateFontIndirect(&log);m_static.SetFont(&font);(2) 把整数显示在该控件的方法:IDC_STAT_DIS为控件IDInt minute=5,sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);另外一种显示的方法:CStatic*pst=(CStatic *)GetDlgItem(IDC_STAT_DIS);pst->SetWindowText("00:00");4 编辑框(Edit Box):MFC提供了CEdit类支持编辑框控件。
Microsoft Word - 定时器vc6
1、打开VC++6.0软件,如下图所示2、选择“File”菜单选项,点击“New”子菜单选项,如下图所示3、(1)选择“Projects”选项,(2)选中“MFC AppWizard(exe)”选项,(3)而后选择你自己的项目要存放的地址“Location”,(4)给出你自己项目的命名;如下图所示4、选中“Single document”选项,而后点击“Next”选项,如下图所示5、点击“Next”选项,如下图所示6、点击“Next”选项,如下图所示7、点击“Next”选项,如下图所示8、点击“Next”选项,如下图所示如下图所示10、生成的界面如下,主要包括“ClassView”界面、“ResourceView”界面和“FileView”界面;我们暂时只和“ResourceView”界面下的Dialog资源下的“IDD_JISUANQI_FORM”界面打交道,如下图所示。
键删除掉它。
12、在工具栏上选择“Edit Box”控件,拖入到界面上去,如下图所示13、右键选择刚拖上来的“Edit Box”控件,选择“Properties”选项,如下图所示14.点击 view 如图进行如下操作15.双击IDC_EDIT_DINGSHIQI ,如图进行如下操作确定16.右键选择刚刚拖上来的 button 控件,选择properties 选项,如下图所示17.再拖入一个button 控件,选择properties 选项,进行如下操作:18.重新拖入一个edit 控件,右击properties 选项,进行如下操作19.选择菜单栏view ,进入进行如下操作:20.重新拖入一个button 控件,右击properties 进行如下操作21.拖入一个button 控件,进行如下操作22.双击启动定时器1 ,如图选择ok,如图添加代码:SetTimer(1,1000,NULL);23.双击停止定时器1,进行如图操作:添加代码KillTimer(1);24.双击启动定时器2 ,进行如图操作添加代码SetTimer(2,500,null);25.双击停止定时器2,进行如图操作:添加代码KillTimer(2);25.点击菜单栏view 选项,如图:点击Add Function,确定;添加如下代码:。
CMFC中定时器的使用
CMFC中定时器的使用MFC(Microsoft Foundation Class)是一套面向Windows平台的C++类库,它简化了Windows API的使用,并提供了一些常用的界面和功能组件。
MFC中的定时器允许开发人员在应用程序中设置一定的时间间隔,以执行特定的任务或更新界面。
本文将详细介绍MFC中定时器的使用方法。
在MFC中,定时器的创建和管理是通过CWnd类来实现的。
CWnd类是MFC中所有窗口类的基类,它封装了一些与窗口有关的函数和属性。
首先,需要在窗口类的头文件中添加响应的定时器消息映射:```cppclass CMyWnd : public CWndDECLARE_MESSAGE_MAPafx_msg void OnTimer(UINT_PTR nIDEvent);};```然后,在窗口类的源文件中添加消息映射的处理函数:```cppBEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_TIMEREND_MESSAGE_MAPvoid CMyWnd::OnTimer(UINT_PTR nIDEvent)switch (nIDEvent)case 1://处理定时器1的逻辑break;case 2://处理定时器2的逻辑break;default:break;}CWnd::OnTimer(nIDEvent);```在窗口类的构造函数中,可以通过调用CWnd类的SetTimer函数来创建定时器:```cppCMyWnd::CMyWndSetTimer(1, 1000, NULL); // 创建ID为1的定时器,时间间隔为1000msSetTimer(2, 2000, NULL); // 创建ID为2的定时器,时间间隔为2000ms```在窗口类的析构函数中,需要调用CWnd类的KillTimer函数来销毁定时器:```cppCMyWnd::~CMyWndKillTimer(1); // 销毁ID为1的定时器KillTimer(2); // 销毁ID为2的定时器```通过上述代码,我们可以在窗口类中创建和管理多个定时器,并且可以在OnTimer函数中根据定时器的ID来处理相应的逻辑。
C MFC中定时器的使用
C++ MFC中定时器的使用用处:定时重绘,形成动态波形图。
如温度曲线。
思路:与单片机定时器中断一样,先打开定时器再把执行的代码写进编译器生成的CMy56Dlg::OnTimer(UINT nIDEvent)函数中。
其中 nIDEvent 中的n代表定时器的编号;通常与switch-case语句构成多个定时器的同时使用。
步骤:一.通过类向导在对话框基类中添加 OnTimer子类。
步骤:【查看】-【类向导】-【Messagemaps】-【CMy**Dlg】-【message】-【WM_timer】编译后CMyDlg类此时会自动添加一个 OnTimer(UINT nIDEvent)子类。
并添加一个响应函数void CMy56Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDialog::OnTimer(nIDEvent);//这句话编译器自动添加,看样子是判断第几个定时器触发的响应。
貌似可以删掉。
}二.到此就可以使用定时器了。
使用方法:首先执行SetTimer(UINT nIDEvent,timer,NULL);其中UINT nIDEvent是定时器编号,需自己设定想用定时器1就设为1。
雷同于单片机的定时器1和2。
timer是uint型,表示定时时间,单位为ms.NULL保留。
然后添加中断函数如下:void CMy56Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDialog::OnTimer(nIDEvent);}三:例子假定用的是定时器一,定时1s:1.【查看】-【类向导】-【Messagemaps】-【CMy**Dlg】-【message】-【WM_timer】并编译2.开启定时器:SetTimer(1,1000,NULL);//定时器一,定时一秒。
Microsoft Word - 定时器vs2010
定时器1、打开VS2010软件,如下图所示2、选择文件菜单选项,点击新建子菜单选项,选择项目选项,如下图所示3在VS2010中选择MFC应用程序,在名称里填入“Dingshiqi”,点击确定。
4、在“应用程序类型”项选择单个文档,然后点击下一步,如下图5、选中生成的类中的“CDingshiqiView”,在基类中选择CFormView选项,点击完成。
6在资源视图中打开Dialog文件,双击“IDD_DINGSHIQI_FORM”,如下图7、选中界面上的“TODO:在这个对话框里设置表格控制。
”控件,选择右键属性8将caption中删除,然后将ID改为IDC_STATIC_XIANSHISHIJIAN9、选择工具栏的Edit Control控件,拖入到界面上去,如下图所示控件,选择“属性”选项,如下图所示IDC_EDIT_DINGSHI将ID改为IDC_EDIT_dingshiqi2到界面上去,如下图所示14右键选择刚拖上来的“BUTTON”控件,选择“属性”选项,将Caption改为启动定时器1,ID修改为:IDC_EDIT_DINGSHI1。
15、同理再拖入一个“BUTTON”控件到界面上去,右键选择刚拖上来的“BUTTON”控件,时器2,ID修改为:IDC_EDIT_DINGSHI2。
16、再拖入一个“BUTTON”控件到界面上去,右键选择刚拖上来的“BUTTON”控件,选择“属性”选项,将Caption改为停止定时器1,ID修改为:IDC_BUTTON_STOP1。
17、同理再拖入一个“BUTTON”控件到界面上去,右键选择刚拖上来的“BUTTON”控件,时器2,ID修改为:IDC_EDIT_STOP2。
18、选择项目选项中的类向导,在跳出的框中选择成员变量,19选择IDC_EDIT_DINGSHI选项,单击添加变量,在成员变量名称填写“m_dingshi”,类别选择“value”,变量类型为“int”, 确定20同理选择IDC_EDIT_dingshiqi2选项,单击添加变量,在成员变量名称填写“m_dingshiqi2”,类别选择“value”,变量类型为“int”,确定21、点击确定。
定时器的使用方法
定时器的使用方法定时器是一种常用的工具,它可以在特定的时间间隔内执行某个任务或者动作,比如定时关闭电脑、定时播放音乐等。
在日常生活和工作中,我们经常会用到定时器,因此掌握定时器的使用方法是非常重要的。
下面,我将为大家介绍定时器的使用方法,希望能够帮助大家更好地利用定时器。
首先,我们需要了解定时器的基本原理。
定时器是通过设定一个时间间隔,当时间到达设定的间隔时,就会触发相应的操作。
在计算机领域,定时器通常是通过编程语言或者操作系统提供的接口来实现的。
在其他领域,比如家用电器、手机应用等,定时器也是通过相应的设备或者软件来实现的。
在计算机编程中,定时器的使用方法通常包括以下几个步骤:1. 初始化定时器,首先,我们需要初始化定时器,设置时间间隔和触发的操作。
这通常包括设置定时器的周期、触发条件等参数。
2. 启动定时器,一旦定时器初始化完成,我们就可以启动定时器,让它开始工作。
在计算机编程中,通常是调用相应的函数或者方法来启动定时器。
3. 处理定时器触发事件,当定时器的时间间隔到达时,就会触发相应的事件。
在编程中,我们通常会编写相应的处理函数来处理定时器触发的事件。
4. 停止定时器,在某些情况下,我们可能需要停止定时器的工作。
这通常是通过调用相应的函数或者方法来实现的。
除了计算机编程中的定时器使用方法,我们在日常生活中也经常会用到定时器。
比如,定时器可以用来设置闹钟、定时关闭电视、定时煮饭等。
在手机应用中,定时器也经常被用来设置提醒、定时播放音乐等功能。
在家用电器中,定时器也被广泛应用,比如洗衣机的定时洗涤功能、空调的定时开关机功能等。
总的来说,定时器是一种非常实用的工具,它可以帮助我们在特定的时间间隔内执行某个任务或者动作。
掌握定时器的使用方法,可以让我们更好地利用定时器,提高工作和生活的效率。
希望通过本文的介绍,大家能够更加了解定时器的使用方法,从而更好地应用定时器。
002MFC定时器SetTimer函数用法总结
MFC定时器SetTimer函数用法总结CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数SetTimer则没有这个限制,这是一个很重要的区别。
1、启动定时器。
启动定时器就需要使用CWnd类的成员函数SetTimer。
CWnd::SetTimer的原型如下:参数nIDEvent指定一个非零的定时器ID;参数nElapse指定间隔时间,单位为毫秒;参数lpfnTimer指定一个回调函数的地址,如果该参数为NULL,则WM_TIMER消息被发送到应用程序的消息队列,并被CWnd对象处理。
如果此函数成功则返回一个新的定时器的ID,我们可以使用此ID通过KillTimer成员函数来销毁该定时器,如果函数失败则返回0。
通过SetTimer成员函数我们可以看出,处理定时事件可以有两种方式,一种是通过WM_TIMER消息的消息响应函数,一种是通过回调函数。
如果要启动多个定时器就多次调用SetTimer成员函数。
另外,在不同的CWnd 中可以有ID相同的定时器,并不冲突。
2、为WM_TIMER消息添加消息处理函数,或者定义回调函数。
如果调用CWnd::SetTimer函数时最后一个参数为NULL,则通过WM_TIMER 的消息处理函数来处理定时事件。
添加WM_TIMER消息的处理函数的方法是,在VS2010工程的类向导,选择要添加定时器的类,在消息列表中找到WM_TIMER消息,添加消息处理函数。
添加后,cpp文件中会出现类似如下内容:C++代码BEGIN_MESSAGE_MAP(CExample44Dlg, CDialogEx)......ON_WM_TIMER()END_MESSAGE_MAP()void CExample44Dlg::OnTimer(UINT_PTR nIDEvent){// TODO: Add your message handler code here and/or call defaultCDialogEx::OnTimer(nIDEvent);}之后就可以在OnTimer函数中进行相应的处理了。
mfc ctime的用法
mfc ctime的用法
MFCCTime是一种日期和时间类,用于在MFC应用程序中管理日期和时间。
它提供了许多有用的方法,例如获取当前日期和时间、格式化日期和时间字符串、比较两个日期和时间等。
使用CTime类,可以轻松地在MFC应用程序中处理日期和时间。
CTime类的构造函数有多种重载形式,可以接受不同的参数类型。
例如,可以使用当前日期和时间创建一个CTime对象,也可以使用表示日期和时间的整数值创建一个CTime对象。
还可以使用字符串表示的日期和时间创建CTime对象。
CTime类还提供了许多有用的方法,例如GetYear、GetMonth、GetDay、GetHour、GetMinute和GetSecond,可以从CTime对象中获取日期和时间的各个部分。
还可以使用Format方法将CTime对象格式化为字符串表示形式,并使用ParseDateTime方法将字符串解析为CTime对象。
CTime类还提供了一些与日期和时间比较相关的方法,例如Compare、operator<、operator>、operator==等。
这些方法可以帮助开发人员比较两个日期和时间,以确定它们的关系。
总之,MFC CTime是一种非常有用的日期和时间类,可以帮助开发人员在MFC应用程序中轻松处理日期和时间。
掌握CTime的用法可以使开发人员更加高效地编写MFC应用程序。
- 1 -。
VS2010_MFC编程入门之四十四(MFC常用类:定时器Timer)-软件开发-鸡啄米
5. UINT nMsg, // WM_TIMER 6. 7. UINT nIDEvent // timer identification 8. 9. DWORD dwTime // system time 10. 11. );
参数hWnd为调用SetTimer成员函数的CWnd对象的句柄,即拥有此定时器的窗口的句柄;参数n Msg为WM_TIMER,而且总是为WM_TIMER;参数nIDEvent为定时器ID;参数dwTime为系统启动以 来的毫秒数,即GetTickCount函数的返回值。
C++代 码
1. void CExample44Dlg::OnTimer(UINT_PTR nIDEvent)
2. {
3.
// TODO: Add your message handler code here and/or call default
4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. }
分类标签: 编程入门
VS2010
VC++
MFC
前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器。定时 器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSp an之后讲解。
站内搜索 请输入搜索内容..
定时器简介
定时器,可以帮助开发者或者用户定时完成某项任务。在使用定时器时,我们可以给系统传入一 个时间间隔数据,然后系统就会在每个此时间间隔后触发定时处理程序,实现周期性的自动操作。例 如,我们可以在数据采集系统中,为定时器设置定时采集时间间隔为1个小时,那么每隔1个小时系统 就会采集一次数据,这样就可以在无人操作的情况下准确的进行操作。
MFC定时器使用
返回
步骤3 添加WM_TIMER的消息响应函数(略)
步骤4 添加定时器消息响应代码。 void CTimerSampleDlg::OnTimer(UINT nIDEvent) {
m_Edit1=m_Edit1+1;
UpdateData(FALSE);//将变量的值送给控件显示。 CDialog::OnTimer(nIDEvent);
且仅供Windows 95及其后续版本使用,其精度与CPU的时钟频率有关,
它们要求计算机从硬件上支持精确定时器。 QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数
的原型如下:
BOOL QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency); BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
}
返回
4)编写回调函数代码 void CALLBACK CTimerSampleDlg::TimeProc(UINT uID,UINT uMsg,
DWORD dwUser,DWORD dw1,DWORD dw2)
{ m_Cal=m_Cal+1;
}
回调函数参数说明: uID——定时器标识,其值和TimerID一致。 uMsg,dw1,dw2保留参数,目前不起作用 dWUser——存放用户的回调数据。
返回
返回
4.1
3、使用QueryPerformanceFrequency()和QueryPerformanceCounter
()函数
对于更精确的定时操作,使用QueryPerformanceFrequency()和 QueryPerformanceCounter()函数。这两个函数是Visual C++提供并
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时器使用总结:
1、在WM_CREATE消息中启动定时器(SetTimer) 2、在WM_TIMER消息中编写定时函数(即需要周期性完成的工作)
3、在定时工作完成之后关闭/停止定时器。(可选)
返回
4.1
3、程序示例
程序设计目标:设计一个定时器程序,窗口内显示的数字每隔100毫秒 自动加1。
程序设计步骤:
}
返回
4)编写回调函数代码 void CALLBACK CTimerSampleDlg::TimeProc(UINT uID,UINT uMsg,
DWORD dwUser,DWORD dw1,DWORD dw2)
{ m_Cal=m_Cal+1;
}
回调函数参数说明: uID——定时器标识,其值和TimerID一致。 uMsg,dw1,dw2保留参数,目前不起作用 dWUser——存放用户的回调数据。
返回
MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, WORD dwUser, UINT fuEvent )
参数说明:
uDelay:以毫秒指定时的周期 Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越 高。缺省值为1ms。 LpTimeProc:指向一个回调函数,该回调函数包含需要定时执行的代码。 DwUser:存放用户提供的回调数据。 FuEvent:指定定时器事件类型: TIME_ONESHOT:uDelay毫秒后只产生一次事件。
1、WM_TIMER的功能: (1)可以完成定时操作。
(2)定时任务执行完毕后,将控制权交回给程序。程序可以进行其它
的操作。
返回
WM_TIMER方式定时的工作原理
应用程序启动定时器
系统监控到定时时间到
应用程序响应其他 消息或执行其它的 操作
应用程序触发WM_TIMER消息
应用程序响应WM_TIMER消息 (即执行WM_TIMER相应的响应函数)
返回
第3章 定时器的应用
返回
目录
3.1 概述
3.2 定时器的使用方法
3.3 其它定时方法概述
4.1 3.1 概述
在计算机程序设计领域,有很多功能是周期性执行的, 如:数据采集程序,系统时间的显示等。 数据采集:周期性地获得现场的物理量信息
系统时间的显示:周期性地获得系统时间,并显示出来。
完成上述这些功能的代码都是按照一定的时间间隔周期性地执行 的,这是就需要用到一个新的组件——定时器(TIMER)。 定时器是Windows系统的资源, Visual C++提供了定时器消息和一 些与定时相关的函数。使用这些函数可以完成程序代码的周期性执行。
返回
步骤3 添加WM_TIMER的消息响应函数(略)
步骤4 添加定时器消息响应代码。 void CTimerSampleDlg::OnTimer(UINT nIDEvent) {
m_Edit1=m_Edit1+1;
UpdateData(FALSE);//将变量的值送给控件显示。 CDialog::OnTimer(nIDEvent);
且仅供Windows 95及其后续版本使用,其精度与CPU的时钟频率有关,
它们要求计算机从硬件上支持精确定时器。 QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数
的原型如下:
BOOL QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency); BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
{
……. static void CALLBACK TimeProc(UINT uID,UINT uMsg,
DWORD dwUser,DWORD dw1,DWORD dw2); // 定时器回调函数
int TimerID; // 定时器ID …….
};
注意:使用多媒体定时器必须指明回调函数。
返回
3)在OnButtonstarttimer添加启动多媒体定时器的语句
1、生成应用程序框架(基于对话框TimerSample)。 2、编辑对话框资源。
3、添加定时器消息响应函数。
4、添加定时器消息响应代码。 5、增加启动和停止定时器的按钮消息响应函数。
返回
4.1
步骤1 生成应用程序框架 选择基于对话框的程序,名称为TimerSample。 步骤2:编辑对话框资源。在对话框上增加一个编辑框和两个按钮, 控件属性如下: Caption ---------启动定时器 停止定时器 ID IDC_EDIT1 IDC_BUTTONSTARTTIMER IDC_BUTTONKILLTIMER 关联变量 m_Edit1
void CTimerSampleDlg::OnButtonstarttimer() { TimerID = timeSetEvent(100, 1, LPTIMECALLBACK)TimeProc, 0,TIME_PERIODIC); //新加代码
SetTimer(1,100,NULL);/IMER的缺点:
1、精度低,最小计时精度大约为55ms(Win95),或10ms左右(Win2000/xp) 2、定时器消息在多任务操作系统中的优先级较低,有时不能得到及 时响应。(一旦计算机的CPU被某个进程占用,或系统资源紧张时, 发送到消息队列中的消息就暂时被挂起,WM_TIMER消息得不到及时处 理。)
功能:设置并启动一个多媒体定时器。
函数原型: MMRESULT timeSetEvent( UINT uDelay, UINT uResolution,
LPTIMECALLBACK lpTimeProc, WORD dwUser, UINT fuEvent )
函数头文件:#include "mmsystem.h"
返回
3.2 定时器的使用方法
3.2.1 Sleep函数
3.2.2 WM_TIMER消息 3.2.3 多媒体定时器
返回
Viusal C++提供了三种完成周期性操作的方法: 1、Sleep函数(延时函数)。 2、WM_TIMER消息(Windows窗口消息)。 3、多媒体定时器。
返回
3.2.1 Sleep函数 while(1) {
}
返回
步骤5、增加启动和停止定时器的消息响应函数。 void CTimerSampleDlg::OnButtonkilltimer() {
KillTimer(1);
} void CTimerSampleDlg::OnButtonstarttimer() {
SetTimer(1,100,NULL);
返回
3.2.3 多媒体定时器 1、 针对前两种定时器的缺点,MicroSoft公司提供了一种精度更高的 定时器——多媒体定时器。 优点: (1)精度较高:多媒体定时器最小误差为1毫秒。 (2)优先级较高,可以减轻资源紧张对定时器运行的影响。
返回
2、多媒体定时器的使用
timeSetEvent 函数
返回
4.1
3、使用QueryPerformanceFrequency()和QueryPerformanceCounter
()函数
对于更精确的定时操作,使用QueryPerformanceFrequency()和 QueryPerformanceCounter()函数。这两个函数是Visual C++提供并
TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。
返回
2、使用举例 程序功能:实现窗口内数字每隔100毫秒自动加1。 1)在TimerSample程序的主窗口上增加一个编辑控件
返回
2)在对话框的头文件中定义代码
class CTimerSampleDlg : public CDialog
5)在OnTimer中增加代码显示Cal的值。 void CTimerSampleDlg::OnTimer(UINT nIDEvent)
{
m_Edit1=m_Edit1+1; m_Edit2=m_Cal;//添加的代码
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent); }
返回
2、使用WM_TIMER消息需要用到的函数 1) SetTimer()
功能:设置定时间隔并启动定时器。
函数原型:UINT SetTimer(UINT nIDEvent,UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)); 参数说明: nIDEvent:非0值标识Timer的id 。 nElapse:以毫秒为单位的定时间隔时间 lpfnTimer 指向定时事件到达时调用的函数的指针,如果为NULL,那么 调用OnTimer() 例:SetTimer(1,200,NULL)设置并启动一个时间间隔为200ms的定时器。
i=i+1; //此处添加需要周期性执行的代码。
Sleep(1000); } Sleep函数:延时函数 参数:延时的时间(单位ms)
返回
Sleep函数分析 优点: (1)使用简单。 (2)移植方便。
缺点:
(1)CPU占用率高,一般适用于单任务的程序(如DOS操作系统的程序)
(2)程序能够完成的功能比较简单。 (3)定时精度低,(据资料)最小误差为54.915 ms,每秒18.2次。
返回
程序运行结果
4.1
返回