timeSetEvent

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

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.

相關詞條

相關搜尋

熱門詞條

聯絡我們