在dos中定时的两种方法:
1,用空循环来延时,它随着主频的不同而不同
2,截获时钟中断,,计算机时钟中断以每55ms一次触发8号中断,在8号中断中有一个int 1ch,,,所以截获8和1ch可以达到定时要求
在应用程序需要用到定时器时候,用SetTimer函数向Windows申请一个定时器,申请成功的话,系统会以指定的时间周期调用settimer函数指定的回调函数或者,向指定的窗口过程发送WM_TIMER消息,
windows定时器同样是基于中断的,所以最短55ms
定时器消息的特点:
1,windows只有在消息队列中没有其他消息的情况下才会发送WM_TIMER消息,如果windows忙于其他消息没有返回,WM_TIMER消息就会被丢弃,不会被补发。。。
2,在消息队列只能存在一个WM_TIMER消息,存在多个时候,就会被合并在一起
资源脚本文件:
#include <resource.h>
#define DLG_MAIN 1
#define ICO_1 1
#define ICO_2 2
#define IDC_SETICON 100
#define IDC_COUNT 101
ICO_1 ICON "1.ico"
ICO_2 ICON " 2.ico"
DLG_MAIN DIALOG 50,50,113,40
STYLE DS_MODALFRAME | WS_VISIBLE|WS_CAPTION|WS_SYSMENU
CAPTION "定时器例子"
FONT 9,"宋体"
{
ICON ICO_1,IDC_SETICON,8,9,18,21
LTEXT "计数",-1,35,16,255,10
LTEXT " ",IDC_COUNT,62,16,40,10
}
汇编源文件: