Delphi WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器

 settimer()重新设置吧,killtimer等于释放了一个timer,如果要再用,你就得重新设置一下

ID:=SEtTimer(0, 1, 1000, @回调函数);//回调 
KILLTIMER(0, id)//删除

 

声明:
SetTimer(
hWnd: HWND; {与定时器相关联的窗口句柄}
nIDEvent: UINT; {指定一个非 0 的定时器标识符}
uElapse: UINT; {指定间隔时间, 单位是毫秒}
lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数的指针}
): UINT; {返回定时器标识符; 失败返回 0}

//移除定时器函数的声明:
KillTimer(
hWnd: HWND; {与定时器相关联的窗口句柄}
uIDEvent: UINT {定时器标识符}
): BOOL;

//处理 WM_TIMER 消息的回调函数的格式:
TimerProc(
hWnd: HWND; {与定时器相关联的窗口句柄}
uMsg: UINT; {WM_TIMER 消息}
idEvent: UINT; {定时器的标识符}
Time: DWORD {以世界时间公约格式(UTC)指定的系统时间}
); {这是个过程, 无返回值}
--------------------------------------------------------------------------------应该先理解一下再举例:

SetTimer 的参数1: hWnd, 一般指定 Self.Handle 就可以了;

SetTimer 的参数2: nIDEvent 是某个定时器的标识符, 说明可以创建若干个定时器, 随便给个正整数即可;

SetTimer 的参数3: uElapse, 这相当于 VCL 中 Timer 类的 Interval 属性;

看来参数 1-3 还是非常简单, 不好理解的就是参数4: lpTimerFunc, 这是一个过程的地址.

任意一个过程的地址吗? 当然不是; 这个过程的参数结构是 Windows 系统规定的, 我们必须按规定去定义这个过程; 即使你用不到其中的参数也必须如此.


--------------------------------------------------------------------------------

//举例:
var
i: Integer;

//先定义回调函数
procedure MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
begin
Form1.Text := IntToStr(i);
Inc(i);
end;

//创建定时器
procedure TForm1.Button1Click(Sender: TObject);
begin
SetTimer(Handle, 1, 10, @MyTimerProc); {每 1/100 秒调用一次 MyTimerProc}
end;

//删除定时器
procedure TForm1.Button2Click(Sender: TObject);
begin
KillTimer(Handle, 1); {创建时指定的定时器标识是 1, 这里必须要一致}
end;
--------------------------------------------------------------------------------


//如果回调过程是窗体类的一个方法, 需要这样:
var
i: Integer;

//先定义回调函数
procedure TForm1.MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
begin
Text := IntToStr(i);
Inc(i);
end;

//创建定时器
procedure TForm1.Button1Click(Sender: TObject);
begin
SetTimer(Handle, 1, 10, @TForm1.MyTimerProc); {每 1/100 秒调用一次 MyTimerProc}
end;

//删除定时器
procedure TForm1.Button2Click(Sender: TObject);
begin
KillTimer(Handle, 1); {创建时指定的定时器标识是 1, 这里必须要一致}
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值