Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Проблема с VCL компонентами при установке таймера timeSetEvent   Найти похожие ветки 

 
Yuri Btr ©   (2004-09-25 20:10) [0]

Ув. мастера, хотелось бы обсудить вопрос доступа к VCL компонентам из callback функции мультимедийного таймера timeSetEvent. В MSDN написано, что этот таймер создается в собственном потоке. Я использую callback функцию для обновления свойств неких объектов. При этом передавая в качестве dwUser параметр DWORD(Self). При использовании таймера в юните формы, я могу callback ф-ию определить так:

procedure OnTimer(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD) stdcall;
var
Form:TForm1;  
begin
Form:=TForm1(dwUser);
with Form
 do
  begin
   //здесь идут вызовы процедур и функций Form1
  end;
end;

так вот, при вызове процедур и функций Form1 в некоторых из
них может случиться "зависание" компонента, к свойствам которого я обращаюсь.
Например я в callback ф-ии добавляю в ListBox всего одну строку (виснет ListBox), или делаю ClientSocket1.Open (происходит OnLookup, OnConnecting и нет ни OnConnect ни OnError
http://delphimaster.net/view/6-1096115383/)
Как правильно нужно использовать данный таймер? Нужно ли и где вызывать Sinchronize?
Заранее спасибо.


 
Yuri Btr ©   (2004-09-25 20:13) [1]

Забыл добавить тот же самый код прекрасно работает если заменить timeSetEvent на Timer из VCL библиотеки.


 
PGM_X   (2004-09-25 23:51) [2]

"этот таймер создается в собственном потоке" вот и ответ. VCL не является потоконезависимой. Нельзя (не рекомендуется и не гарантируется работоспособность) вызывать функции VCL без специалной защиты (см. например комментарии к TThread).


 
GanibalLector ©   (2004-09-26 00:38) [3]

Вам бы дядьку Рихтера найти.Там у него все описано!!!И особенно синхронизация,что так необходимо Вам.


 
Yuri Btr ©   (2004-09-26 21:59) [4]

Всем спасибо за ответы, которые я и так знал ;)
Но мне нужен пример как на практике это реализовать.
А то знаете ли я сомневаюсь что дядька Рихтер писал про обращения к VCL


 
PGM_X   (2004-09-27 00:01) [5]

[Yuri Btr] Но мне нужен пример как на практике это реализовать.
Варианты:
- Не использовать VCL
- Использовать сообщения или события, а не напрямую писать код в вызове OnTimer.



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

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
6-1093009263
banderas
2004-08-20 17:41
2004.10.31
Ошибка с занятым портом.


1-1097610950
Offspring
2004-10-12 23:55
2004.10.31
TList ??


1-1097747889
V l a d i m i r
2004-10-14 13:58
2004.10.31
TRadioGroup


3-1096291401
UnDISCOvery
2004-09-27 17:23
2004.10.31
Как определить наличие записи в табл. Access?


1-1097673237
Uran
2004-10-13 17:13
2004.10.31
Цифровые символы в строке