![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 6 Всего: 8 |
Такая проблема: есть ActiveX контрол написанный на Delphi, в нем создается поток, при вызове в этом потоке Synchronize - поток виснет, т.е. в Execute не выполняется код следующий за вызовом Synchronize. Проблема именно в Synchronize, т.к. убрал весь лишний код вызывал пустой метод, пробовал менять потоковые модели компонента, ничего не помогает.
Кто нибудь сталкивался с подобной проблеммой? |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
CatATonik, может код покажешь?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 6 Всего: 8 |
Вот этого вполне достаточно:
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
CatATonik, а ты создал это
имхо недостаточно -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
CatATonik, не лепи Synchronize в TMyThread.Execute;!
Процедура-то override. Поэтому и не работает. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
улыбнуло -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
В procedure TMyThread.DoNothing; например. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
и что в качестве параметра задавать? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
x := 0 уберет оптимизатор и бряк не сработает
-------------------- Обижено школьников: 8 |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Оно так иногда не работает на бряках. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 6 Всего: 8 |
2Sunvas:
Метод Execute для того и существует что-б туда вставить код исполняемыей в потоке, метод Synchronize для того и существует, что-б из потока безопасно выполнить код обращающийся к данным другого потока (DoNothing), зачем вызывать Synchronize из DoNothing я вообще не понял. Читайте документацию. Очевидно проблема не в том, что где и как я вызываю, а в работе VCL'ного TThread в во вражеском окружении (ActiveX). Поэтому и вопрос: существуют ли методы обойти эту проблему. Пока я склоняюсь к тому что придется использовать WinAPI, хотя опыта работа с потоками через API у меня нет и вообще геморойно это |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
CoInitializeEx/CoUninitialize в потоке может поможет?
p.s. а вообще приведенного кода явно недостаточно.то что написано - должно работать 100%. DoNothing выполняется? Это сообщение отредактировал(а) MetalFan - 17.1.2007, 12:32 -------------------- There are always someone smarter than you... |
|||
|
||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 6 Всего: 8 |
Не не помогло.
Кстати создал новый проект (ActiveX Library) с одним простым ActiveX контролом, зарегестрил его, создал новый пустой проект, куда его вставил. Таже фигня! Добавлено @ 13:03 Кто не верит, вот файл с тестовыми проектами, там есть Test.bpg. Открываете сначала компилите TestControl.ocx, потом меню "Run \ Register ActiveX Server", потом запускаете Project1.exe и нажимаете кнопку Start. Может это только у меня не работает? Присоединённый файл ( Кол-во скачиваний: 3 )
ActiveXTest.rar 16,36 Kb |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
а... ну понятно... у ActiveX и Приложения разные TApllication. а так же разные списки синхронизации, что более критично.
вариант - отказаться от использования Synchronize Это сообщение отредактировал(а) MetalFan - 17.1.2007, 13:40 -------------------- There are always someone smarter than you... |
|||
|
||||
| CatATonik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 12.1.2007 Где: Москва Репутация: 6 Всего: 8 |
Короче из документации:
Warning: Do not call Synchronize from within the main thread. This can cause an infinite loop. Будем делать ручками 2CatATonik: Читай документацию |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |