timeSetEvent

timeSetEvent 是一種精確度非常高的定時器,與windows定時器不同的是,多媒體定時器不使用容易丟失的視窗訊息,它提供另外兩種方式來觸發。

基本介紹

  • 中文名:timeSetEvent
  • 類型:定時器
  • 觸發方式回調函式、事件方式
  • 區別:windows定時器
Delphi聲明,Delphi調用方法,

Delphi聲明

function timeSetEvent(uDelay, uResolution: UINT; //uDelay 定時器觸發的時間間隔
//uResolution 定時器使用的解析度(精確度)
lpFunction: TFNTimeCallBack; //若觸發方式為回調函式,則為回調函式的指針
//若採用事件方式,則為 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.

相關詞條

熱門詞條

聯絡我們