И жнец и на дуде игрец.
Sergey Voronin пишет в сообщении <987113451@p113.f4.n5052.z2.ftn> ...
> Пожалуйста, если не трудно, набросайте примерчик (или может есть
готовый?)
>использования API-шной функции SetTimer для периодического вызова
определённой
>процедуры. Хелпы читал двое суток, но так ничего и не получилось. :(
>
> Только не предлагайте использовать компонент TTimer, он не обеспечивает
>нужной точности и частоты вызова процедуры. Или ему приоритет задачи
поднять
>надо?
TTimer использует WM_TIMER , которое вообще имеет наименьший приоритет как
событие.
Для обеспечения приемлемой точности необходимо использовать мультимедийный
таймер.
Пример:
Unit XXX;
interface
// ПРОПУЩЕНО
implementation
uses
MMSystem;
// ПРОПУЩЕНО
procedure CALLBACKTimer( uTimerID, uMsg : cardinal; dwUser, dw1, dw2 :
longint ); stdcall;
begin
// Выполняемые действия. Должны быть непродолжительными.
// К примеру, можно изменить переменную и послать сообщение WM_TIMER для
более подробной обработки
end;
// ПРОПУЩЕНО
// Метод компонента "Мультимедийный таймер"
procedure TMMTimer.UpdateTimer;
begin
if (FInterval>0) and
(FEnabled) and
(Assigned(FOnTimer)) and
(TimerId<0)
then begin
UFT_index := Add( Timer );
//********************************
Непосредственно создание события
//********************************
TimerId :=
timeSetEvent( FInterval, // Интервал
FResolution, // Точность
@CALLBACKTimer, // Call-back процедура
UFT_index, // параметр пользователя
TIME_PERIODIC ); // опция (см. HELP )
end;
if ((FInterval=0) or (not FEnabled) or (not Assigned(FOnTimer))) and
(TimerId>=0)
then begin
timeKillEvent( TimerId ); // уничтожение события
Delete( UFT_index );
TimerId := -1;
end;
end;
// ПРОПУЩЕНО
END.