Windows编程学习笔记(九)
2010-02-03 16:50
295 查看
第六章 定时器
定时器的原理及使用,在windows程序中的作用,WM_TIMER消息的使用。
/******************************************************************************/
我们都知道,无论是那种语言和程序,定时器功能都是必不可少,他的作用非常广泛,·定时显示·在游戏同步的应用·多媒体播放声音等等,下面就系统的学习windows程序设计中的定时器。
定时器消息不是异步的
定时器使用硬件中断,但WM_TIMER消息不是异步的,wm_timer放在消息队列中,当程序中其他信息执行期间,程序不会受到任何wm_timer消息。
/*********************************************************************************/
定时器的使用
有三种方法:
·最简单的方法,就是让定时器发送wm_timer消息到窗口处理程序中,开始计时时使用SetTimer(hwnd,timer_ID,mmsec,NULL);这样程序就会每隔mmsec毫秒收到一个wm_timer消息,使用完后,呼叫KillTimer(hwnd,timer_id)来释放定时器。这用方法有一定的缺陷,就是当窗口处理程序处理别的事情时,有可能不会理会wm_timer消息。
·这种方法是吧wm_timer消息发送到程序的另一个消息处理函数中,这种函数也是用CALLBACK 修饰的,VOID CALLBACK TimerProc(HWND hwnd,UINT msg,UINT timer_id,DWORD wParam);
Hwnd是在呼叫SetTimer时指定的窗口句柄,windows把wm_timer消息发送给TimerProc,因此消息参数是WM_timer,所以当我们启动定时器时,可以这样写:
SetTimer(hwnd,timer_id,mmsec,TimerProc);
KillTimer(hwnd,timer_id);
这样就可以把这个定时器与TimerProc关联起来了。
·第三种方法和第二种方法差不多,只不过hwnd参数设定为NULL,第二个参数ID也被忽略了,例如:
iTimerID= SetTimer(NULL,0,mmsec,TimerProc);
KillTimer(NULL,iTimerID);
这种方法很少使用,只有我们不去明确的说明需要这个定时器的ID,也就是说,我们不去关心ID,而且通常使用一系列的SetTimer时,这种方法是十分有用的。
/***********************************************************************/
系统时间
和定时器十分相关的一个内容就是系统时间,虽然书上没讲,但还是学习一下。
系统时间可以保存在SYSTEMTIME结构中,先看下SYSTEMTIME的定义
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME,
*PSYSTEMTIME;
各个字段的内容显而易见,
wYear
The year (1601 - 30827).
wMonth
The month.
January = 1
February = 2
March = 3
April = 4
May = 5
June = 6
July = 7
August = 8
September = 9
October = 10
November = 11
December = 12
wDayOfWeek
The day of the week.
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
wDay
The day of the month (1-31).
wHour
The hour (0-23).
wMinute
The minute (0-59).
wSecond
The second (0-59).
wMilliseconds
The millisecond (0-999).
我们使用函数GetSystemTime来获得系统时间。
SYSTEMTIME sys_time;
GetSystemTime(&sys_time);
定时器的原理及使用,在windows程序中的作用,WM_TIMER消息的使用。
/******************************************************************************/
我们都知道,无论是那种语言和程序,定时器功能都是必不可少,他的作用非常广泛,·定时显示·在游戏同步的应用·多媒体播放声音等等,下面就系统的学习windows程序设计中的定时器。
定时器消息不是异步的
定时器使用硬件中断,但WM_TIMER消息不是异步的,wm_timer放在消息队列中,当程序中其他信息执行期间,程序不会受到任何wm_timer消息。
/*********************************************************************************/
定时器的使用
有三种方法:
·最简单的方法,就是让定时器发送wm_timer消息到窗口处理程序中,开始计时时使用SetTimer(hwnd,timer_ID,mmsec,NULL);这样程序就会每隔mmsec毫秒收到一个wm_timer消息,使用完后,呼叫KillTimer(hwnd,timer_id)来释放定时器。这用方法有一定的缺陷,就是当窗口处理程序处理别的事情时,有可能不会理会wm_timer消息。
·这种方法是吧wm_timer消息发送到程序的另一个消息处理函数中,这种函数也是用CALLBACK 修饰的,VOID CALLBACK TimerProc(HWND hwnd,UINT msg,UINT timer_id,DWORD wParam);
Hwnd是在呼叫SetTimer时指定的窗口句柄,windows把wm_timer消息发送给TimerProc,因此消息参数是WM_timer,所以当我们启动定时器时,可以这样写:
SetTimer(hwnd,timer_id,mmsec,TimerProc);
KillTimer(hwnd,timer_id);
这样就可以把这个定时器与TimerProc关联起来了。
·第三种方法和第二种方法差不多,只不过hwnd参数设定为NULL,第二个参数ID也被忽略了,例如:
iTimerID= SetTimer(NULL,0,mmsec,TimerProc);
KillTimer(NULL,iTimerID);
这种方法很少使用,只有我们不去明确的说明需要这个定时器的ID,也就是说,我们不去关心ID,而且通常使用一系列的SetTimer时,这种方法是十分有用的。
/***********************************************************************/
系统时间
和定时器十分相关的一个内容就是系统时间,虽然书上没讲,但还是学习一下。
系统时间可以保存在SYSTEMTIME结构中,先看下SYSTEMTIME的定义
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME,
*PSYSTEMTIME;
各个字段的内容显而易见,
wYear
The year (1601 - 30827).
wMonth
The month.
January = 1
February = 2
March = 3
April = 4
May = 5
June = 6
July = 7
August = 8
September = 9
October = 10
November = 11
December = 12
wDayOfWeek
The day of the week.
Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
wDay
The day of the month (1-31).
wHour
The hour (0-23).
wMinute
The minute (0-59).
wSecond
The second (0-59).
wMilliseconds
The millisecond (0-999).
我们使用函数GetSystemTime来获得系统时间。
SYSTEMTIME sys_time;
GetSystemTime(&sys_time);
相关文章推荐
- MFC学习笔记2 Windows编程基础--MessageBox
- DotNet Windows编程学习笔记【一】
- windows编程学习笔记之基础文字显示
- windows编程学习笔记(1)创建窗口与消息循环
- Direct3D 10学习笔记(四)——Windows编程
- windows网络编程--学习笔记01
- Windows网络编程之Select模型学习笔记
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- 雅阁学习笔记之windows编程——保存文件和打开浏览文件夹窗口
- 发生系统错误 1275.此驱动程序被阻止加载 寒江孤钓<<windows 内核安全编程>> 学习笔记
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- 四. 文本编程--Windows编程课程学习笔记
- C#学习之路,学习笔记 第13章 Windows窗体编程 13.4超链接标签(LinkLabel)
- windows编程学习笔记之定时器
- 雅阁学习笔记之windows编程
- MFC学习笔记之四————菜单编程与windows消息分类
- Windows编程学习笔记 lesson2 窗口创建
- Windows编程学习笔记(十三)
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 【windows 】编程基本数据类型(学习笔记)