Замена TTimer

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

Может туплю, но не могу сообразить, чем заменить TTimer так, чтобы не было зависимости от LCL. Не обязательно компонент, достаточно просто кода, выполнение которого приводит к периодическому запуску указанной процедуры. Неужто в FCL такого нет? Куда копать-то?

PS: Это всё к тому, чтобы избавиться от LCL-зависимости у FIBL. Периодический запуск процедуры там реально нужен для проверки соединения.
Гость_SergKam

Сообщение Гость_SergKam »

В unix для этого используется сигнал ALARM, его и программе подается сигнал через указаное количество секунд.
А вообще, не пробовал посмотрель реализацию самого компонента TTimer?
Cтас

Сообщение Cтас »

Используй SetTimer, описание в МСДН.
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

Э нет, так не пойдёт. Я хочу платформонезависимую реализацию (т.е. желательно средствами rtl, ну или fcl). TTimer в этом смысле мне не помошник, потому как уходит корнями в TWidgetSet, следовательно зависит от платформы и реализован только для того, для чего реализована lcl.
Sega-Zero
незнакомец
Сообщения: 1
Зарегистрирован: 12.11.2005 18:44:23

Сообщение Sega-Zero »

Я так понимаю, проги будут писаться, в основном под линь и вынь?
Почему бы не сделать
{$IFDEF WIN32}
//code for win
{$ELSE}
//code for *nix
{$ENDIF}
Аватара пользователя
shraibikus
новенький
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень
Контактная информация:

Сообщение shraibikus »

Cтас писал(а):Используй SetTimer, описание в МСДН.

ок.
В Delphi этот код работает:

Код: Выделить всё

SetTimer(0,1,1000,@OnTimer);

в Lazarus сообщает:
RDM.lpr(24,40) Error: Incompatible type for arg no. 4: Got "<address of procedure;Register>", expected "<procedure variable type of procedure(LongWord, LongWord, LongWord, LongWord);StdCall>"


Как быть, кроме

Код: Выделить всё

{$mode delphi}{$h+}

?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Функция обработчик должна выглядеть так:

Код: Выделить всё

procedure OnTimerProc(_para1:HWND; _para2:UINT; _para3:UINT; _para4:DWORD); stdcall;
Аватара пользователя
shraibikus
новенький
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень
Контактная информация:

Сообщение shraibikus »

Mr.Smart спасибо! =)
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

В рассылке только что пробегал вопрос по TFPTimer.
Ответить