Вниз
Скачать: 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.024 c
3-1096700983
It06
2004-10-02 11:09
2004.10.31
Query SQL -запрос


14-1097652544
Димитрий
2004-10-13 11:29
2004.10.31
Ищу простенький текстовый редактор на Delphi


4-1096180093
___^}{@eRo^___
2004-09-26 10:28
2004.10.31
Создание Рабочего стола


14-1097655093
Herzog
2004-10-13 12:11
2004.10.31
Inkompatible Typen: String und procedure, untyped pointer or .


14-1097760466
GavrilaMama
2004-10-14 17:27
2004.10.31
Тип жесткого диска - динамический... Как исправить?




   Наверх