Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.979 c
8-1091525797
Андрей Валенинов
2004-08-03 13:36
2004.10.31
Помогите с картинкой


14-1097582963
Nick Denry
2004-10-12 16:09
2004.10.31
http://www.sodipodi.com/


8-1091696002
Nolf
2004-08-05 12:53
2004.10.31
Старая добрая Winamp а..


1-1098254696
Zirf
2004-10-20 10:44
2004.10.31
Как QuickReport е принудительно создать несколько страниц


14-1097344110
maxz
2004-10-09 21:48
2004.10.31
глюки Delphi 8




   Наверх