delphi linux使用高精度定时器回调函数
时间: 2023-06-30 09:22:38 浏览: 179
在 Delphi 11 Linux 中,可以使用 `TThread.CreateAnonymousThread` 方法来创建一个匿名线程,然后在匿名线程中使用高精度定时器来执行回调函数。
以下是一个使用高精度定时器回调函数的示例代码:
```
uses
Posix.Time, System.Threading;
type
TTimerCallback = reference to procedure;
procedure StartTimer(interval: Cardinal; callback: TTimerCallback);
begin
TThread.CreateAnonymousThread(
procedure
var
ts, te: UInt64;
delta: Int64;
begin
while True do
begin
ts := GetHighPrecisionTimer;
Sleep(interval);
te := GetHighPrecisionTimer;
delta := Int64(te - ts);
if delta < 0 then
begin
delta := -delta;
end;
if delta > interval * 1000 then
begin
// 超时
TThread.Queue(nil, callback);
end;
end;
end
).Start;
end;
```
以上代码中,`StartTimer` 函数接受一个时间间隔和一个回调函数,然后在一个匿名线程中使用高精度定时器来执行回调函数。
在匿名线程中,首先使用 `GetHighPrecisionTimer` 函数获取当前时间,然后使用 `Sleep` 函数来等待指定的时间间隔。等待结束后,再次使用 `GetHighPrecisionTimer` 函数获取当前时间,计算两个时间的时间差,如果时间差超过了时间间隔,则调用回调函数。
注意,在匿名线程中不能直接调用 UI 线程中的控件,需要使用 `TThread.Queue` 方法来在 UI 线程中调用回调函数。
阅读全文