Ребята, помогите с таймерами. Вопрос 1: Почему создаются 2 дополнительных потока? Вопрос 2: Как удалить таймер? Я в функции Stop() как не комбинировал удаление таймеров - потоки либо остаются, либо приложение зависает
Cам таймер работает исправно при этом
Код(это поток):
private
FTimerQueueHandle: THandle;
FTimer: PHandle;
...
end;
...
procedure TimerFunc(Context: Pointer; Success: Boolean); stdcall;
begin
...
end;
procedure TARSThread.Start;
begin
...
// Срабатывание таймера каждые 5 секунд
FTimerQueueHandle := CreateTimerQueue;
CreateTimerQueueTimer(FTimer, FTimerQueueHandle, TimerFunc, nil, 5000, 5000, 0);
...
end;
function TARSThread.Stop: Boolean;
begin
// DeleteTimerQueueTimer(FTimerQueueHandle, FTimer^, 0);
DeleteTimerQueueEx(FTimerQueueHandle, 0);
...
end;
// Подсистему таймеров импортировал вот так:
// --------------------------------------------------------------------------------------
unit wintimer;
interface
uses
Windows;
function CreateTimerQueue: THandle; stdcall;
function CreateTimerQueueTimer(var phNewTimer: PHandle; TimerQueue: THandle;
CallBack: TWaitOrTimerCallback;
Parameter: Pointer; DueTime: DWORD; Period:
DWORD; Flags: ULONG): Integer; stdcall;
function DeleteTimerQueueTimer(TimerQueue: THandle; Timer: THandle;
CompletionEvent: THandle): Integer; stdcall;
function DeleteTimerQueueEx(TimerQueue: THandle;
CompletionEvent: THandle): Integer; stdcall;
implementation
function CreateTimerQueue; external kernel32 name 'CreateTimerQueue';
function CreateTimerQueueTimer; external kernel32 name 'CreateTimerQueueTimer';
function DeleteTimerQueueTimer; external kernel32 name 'DeleteTimerQueueTimer';
function DeleteTimerQueueEx; external kernel32 name 'DeleteTimerQueueEx';
end.
Социальные закладки