Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c