Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > ole обьект в основном и собственноv потоке


Автор: CRACKISH 8.11.2010, 16:19
Приветствую!

У меня проблема такого рода.

есть Ole объект который создается при создании формы.

в собственном потоке я взаимодействую с элементами объекта.  

в чем суть. так вот. если запускать программу с Delphi то все идеально, а вот если просто запустить екзешник вне Delphi, то программа вылетает как только пытается обратиться к элементам ole объекта в моем потоке.

если ставлю в начале потока CoInitialize(nil) то все работает, но программа и поток заметно тормозят.

в чем может быть проблема?

Автор: CRACKISH 9.11.2010, 14:02
хм.. создаю отдельный чистый проект. пишу свой код.. и чудо! все работает! и это без всяких CoInitialize(nil), синхронизации и передачей интерфейса от программы к потоку..


в своем старом проекте перед выполнения потока, активирую форму и тоже чудо работает! но медленнее.. но работает!


а так при создании формы тока в дельфи и работает и с самой быстрой скоростью.. (( в чем прикол то?

Автор: cat512 9.11.2010, 17:20
Imho, чудес и мистики в области разработки ПО не бывает! Без coinitialize работает потому что Coinitialize выполняется в Application. Initialize (емнип)
Смотри в сторону Threading Model. Если хочешь не заморачиваться с синхронизацией, используй Threading model - tmSingle. Тогда вызовы серверу будут сериализовываться
Если необходимо использовать многопоточность обязательно нужно синхронизировать вызовы и обязательно МАРШАЛИТЬ ссылки между потоками, иначе будут глюки! Причём самое хреновое - у тебя они могут не проявляться, но как правило, обязательно проявятся у заказчика

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)