ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
1 июня
1693 Топик полностью
Elektronik (20.12.2003 09:56, просмотров: 1) ответил DASM на если б увидел пользовательскую прогу с TIME_CRITICAL - стер бы на фиг и с этой фирмой дела больше б не имел
И жнец и на дуде игрец. 

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.