timeSetEvent 是一種精確度非常高的定時器,與windows定時器不同的是,多媒體定時器不使用容易丟失的視窗訊息,它提供另外兩種方式來觸發。
基本介紹
- 中文名:timeSetEvent
- 類型:定時器
- 觸發方式:回調函式、事件方式
- 區別:windows定時器
Delphi聲明,Delphi調用方法,
Delphi聲明
function timeSetEvent(uDelay, uResolution: UINT; //uDelay 定時器觸發的時間間隔
//uResolution 定時器使用的解析度(精確度)
//若採用事件方式,則為 event object 的handle
dwUser: DWORD; //可為任意變數或者結構地址,他會在定時器觸發的時候回傳給回調函式
uFlags: UINT //定時器類型,共有兩組旗標
): MMRESULT; stdcall; //返回值,成功的話,返回非零值,代表定時器的編號,失敗返回0
()
當某個定時器已經完成了自己的任務,需要退出的時候,只要調用 timeKillEvent 函式,傳入它的定時器編號即可
function timeKillEvent(uTimerID: UINT): MMRESULT; stdcall; //TimerID 建立定時器時,所返回的編號。
//返回值,若定時器編號無誤,返回TIMERR_NOERROR表示成功釋放,否則返回MMSYSER_INVALPARAM
Delphi調用方法
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MMSystem;
type
TForm1 = class(TForm)
mmo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MMTimerID : Integer;
iMMTimerInc: Integer; //累計觸發次數
Form1: TForm1;
implementation
{$R *.dfm}
procedure MMTimerProc(uTimerID,uMessage:UINT;dwuser,dwl1,dw2:DWORD);stdcall;
begin
Inc(iMMTimerInc);
//這裡做你想做的事,但是不要在這裡直接操作窗體可視控制項,因為timeSetEvent的回調是線上程中進行的
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MMTimerID := timeSetEvent(1000,0,@MMTimerProc,0,TIME_PERIODIC OR TIME_CALLBACK_FUNCTION);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if MMTimerID<>0 then
timeKillEvent(MMTimerID);
end;
end.