Главная страница
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.023 c
1-1098103855
Mishenka
2004-10-18 16:50
2004.10.31
Доступ к динамически создаваемому компоненту???


14-1097314379
race1
2004-10-09 13:32
2004.10.31
раскладка


1-1098087057
DeepSky
2004-10-18 12:10
2004.10.31
DBLookUpComboBox


1-1097780570
Aleks
2004-10-14 23:02
2004.10.31
Вывод графика из TChart в браузер


14-1096638318
malkolinge
2004-10-01 17:45
2004.10.31
Delphi programmer needed