Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > Доуступ к компонентам в потоке. |
Автор: Robus 14.1.2011, 17:30 |
Низкий поклон! Множество раз проходил через потоки, правда в основном это было под OpenGL, и к стандартным виндошным окнам я не касался. Множество раз делал синхронизации данных, но делал это собственноручно, не инструментами Delphi, поскольку слишком уж простая задача. Собственно столкнулся с проблемой когда решил из потока обратиться к "RichEdit.Text", и сразу поймал проблему. Решил особо не чудить и отказался от "RichEdit1". Но столкнулся снова с проблемой с простым "Label.caption", который просто вешает приложение в неактивном состоянии. Никаких ошибок не выдаёт, а простое подвисание, хотя поток крутится исправно. Я так понимаю, что проблема с синхронизацией. Как это побороть простым методом ? В программе поток вызывается так: WO.ThreadHND:=BeginThread(NIL,0,ADDR(WorkThread),0,0,WO.ThreadID); WorkThread это поток из которой идёт обращение к "Label.caption" ... Заранее благодарен. |
Автор: Alexeis 14.1.2011, 18:11 |
Если поток создавать при помощи наследника TThread то у него есть метод Synchronize для синхронизации с главным потоком. |
Автор: kami 18.1.2011, 22:27 |
SendMessage или PostMessagе (в зависимости от необходимых данных) из потока форме, на которой находится нужный компонент. И уже методами формы ловить отправленное сообщение. Afair, TThread.Synchronize работает через SendMessage. |