delphi 64位 timeSetEvent接口替代
时间: 2023-08-10 20:03:50 浏览: 186
TimeSetEvent代替Timer控件
4星 · 用户满意度95%
在Delphi 64位中,timeSetEvent函数已经被弃用,可以使用新的API来替代它。新的API包括timeSetEventEx、CreateTimerQueue、CreateTimerQueueTimer等。这些API提供了更加灵活和可靠的定时器功能,可以满足更多的需求。
例如,可以使用CreateTimerQueueTimer函数来创建一个定时器,它可以在指定的时间间隔内执行回调函数:
```
unit TimerQueue;
interface
uses
Winapi.Windows, System.SysUtils;
type
TTimerQueue = class
private
FTimerQueue: THandle;
FTimer: THandle;
FInterval: Cardinal;
FOnTimer: TProc;
procedure TimerCallback(lpParameter: Pointer; TimerOrWaitFired: Boolean); stdcall;
public
constructor Create(Interval: Cardinal; OnTimer: TProc);
destructor Destroy; override;
end;
implementation
{ TTimerQueue }
constructor TTimerQueue.Create(Interval: Cardinal; OnTimer: TProc);
begin
inherited Create;
FInterval := Interval;
FOnTimer := OnTimer;
FTimerQueue := CreateTimerQueue;
if not CreateTimerQueueTimer(FTimer, FTimerQueue, @TimerCallback, nil, Interval, Interval, WT_EXECUTEDEFAULT) then
RaiseLastOSError;
end;
destructor TTimerQueue.Destroy;
begin
DeleteTimerQueueTimer(FTimerQueue, FTimer, 0);
DeleteTimerQueueEx(FTimerQueue, 0);
inherited;
end;
procedure TTimerQueue.TimerCallback(lpParameter: Pointer; TimerOrWaitFired: Boolean); stdcall;
begin
FOnTimer();
end;
end.
```
在使用时,可以通过创建TTimerQueue对象来启动定时器:
```
procedure TForm1.FormCreate(Sender: TObject);
begin
TTimerQueue.Create(1000, procedure
begin
Label1.Caption := FormatDateTime('hh:nn:ss', Now);
end);
end;
```
阅读全文