Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

Timer в dll   Найти похожие ветки 

 
Vilux ©   (2005-03-09 08:52) [0]

Имеется программа, которая при запуске загружает в себя dll, а затем время от времени запускает процедуру из этой dll. Требуется, чтобы эта процедура создала внутри себя таймер, который бы срабатывал даже когда эта процедура закончилась.
В dll я сделал так:
...
type
TMYTimer=class
public
 Timer:TTimer;
 procedure OnTimer(Sender:TObject);
end;
var MyTimer:TMYTimer;
т.е. сделал глобальную переменную, а затем в одной из процедур в dll делаю

if Timer=nil then
begin
 MyTimer:=TMYTimer.Create;
 MyTimer.Timer:=TTimer.Create(nil);
 MyTimer.Timer.Interval:=10000;
 MyTimer.Timer.OnTimer:=MyTimer.OnTimer;
 MyTimer.Timer.Enabled:=true;
end;

Но таймер не срабатывает, т.е. MyTimer.OnTimer не вызывается (ее код я здесь не привожу)
Т.е. из главной программы я вызываю процедуру в dll, которая создает этот таймер и заканчивает работу, но т.к. таймер сам глобальный, а dll не выгружается из памяти, то по идее он должен срабатывать... но почему не срабатывает?


 
_sulent   (2005-03-09 08:55) [1]

он глобальный для чего? Для того, куда ты его вызываешь. Вырабатывает он себя до тех пор пока не будет вызвана функция:
MyTimer.timer.Free...
Но конкретно для того пространства, в котором он работает... это важно!


 
Vilux ©   (2005-03-09 09:01) [2]

А как мне сделать, чтобы таймер создался в dll, но работал постоянно, пока dll не выгрузится из памяти или пока я сам его не отключу другой процедурой. Просто он вообще не срабатывает. По идее, когда он срабатывает, он должен послать главному приложение через SendMessage определенное сообщение, но оно не шлется,т.е. таймер не запускается.
Мне это нужно для поодержки многомодульности программы, чтобы каждый модуль (dll-ка) могли сами создавать свои таймеры, которые бы работали на всем протяжении работы главной программы, а то до этого мне приходилось в главной программе создавать... но это неудобно


 
_sulent   (2005-03-09 09:07) [3]

Впринципе все делаешь так же, еще знаешь что, проврерь, работает ли та функция OnTimer и так ли она работает
t := TTimer.Create(Application);
t.interval := 1000;
t.onTimer := TimerStart; {Определяешь функцию}
t.Enabled := true;

если таймер у тебя не работает нормально, то попробуй переопределить функцию!
Если уже и это не поможет. То тогда можно будет сделать просто:
делаешь функцию, или класс, который будет возвращать таймер и переопределять его в главной форме.

И каким образом ты грузишь в главную форму DLL?


 
BiN ©   (2005-03-09 09:20) [4]

Vilux ©   (09.03.05 08:52)

Поток, создающий таймер, должен иметь цикл выборки оконных сообщений.


 
Erik1 ©   (2005-03-09 11:01) [5]

А лучше неиспользовать стандартный таймер, возми таймер реализованый в потоке.


 
Eraser ©   (2005-03-09 11:31) [6]

Vilux ©

И передачу события организуй как callback функцию...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.032 c
3-1108547759
samalex
2005-02-16 12:55
2005.03.20
Сообщение об изменениях в БД


4-1107995867
FAQ
2005-02-10 03:37
2005.03.20
Как можно из Дельфи узнать скорости вращения вентиляторов ?


3-1108921984
Raul Kartes
2005-02-20 20:53
2005.03.20
БД.Delphi


3-1108833569
Leonardo
2005-02-19 20:19
2005.03.20
Как получить верный результат используя SUM()


9-1104069951
Brak
2004-12-26 17:05
2005.03.20
Сгдаживание точки в OpenGL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский