TK128和Tqz的方法都是使用延时,这样延时的1秒钟加上处理事件的时间将
大于1秒钟,并非一秒(尤其是处理时间的时间较多如0.9秒,那么是1.9秒处理
一次了)。
下面给出的定时与事件处理时间无关(但事件处理时间必须小于1秒,否则就不是
1秒钟一次了)
uses MMSystem, synobjs;
type
TMyThread=class(TThread)
private
FTimerEvent:TSimpleEvent;
procedure YourWork;
protected
procedure Execute;override;
end;
procedure TimerCallback( uTimerID, uMessage: UINT;
dwUser, dw1, dw2: DWORD );
stdcall;
begin
with TMyThread(dwUser)do
if not Suspended and Assigned(FTimerEvent) then
FTimerEvent.SetEvent;
end;
procedure TMyThread.Execute;
var
FTimer
Word;
FTimerEvent:TSimpleEvent;
lpTimerProc: TFNTimeCallBack;
begin
FOwner.FActionFinished:=False;
FTimerEvent:=TSimpleEvent.Create;
lpTimerProc := @TimerCallback;
FTimer := timeSetEvent(1000, 1000, lpTimerProc, DWORD(Self), TIME_PERIODIC );//创建多媒体定时器,1秒种
while not Terminateddo
begin
YourWork;//你的一秒钟一次的工作
FTimerEvent.WaitFor(1500);
FTimerEvent.ResetEvent;
end;
timeKillEvent( FTimer );
FTimerEvent.Free;
end;