Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание формы (threadsafe) 
:(
    Опции темы
ASGDeveloper
Дата 7.9.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: 1
Всего: 1



Есть значит прога в которой много-много потоков. Работают они, никому не мешают, но время от времени должны показывать форму с некой инфой. Форму, которую они должны показывать я убрал в "available form" и каждый поток создает себе по экземпляру формы. И как раз в этом трабла. Если делать так, то создание формы прерывается где-то в controls.pas (уже не помню на чем), а если ее все-таки вернуть в автосоздаваемые формы, то форма показывается (первый раз) нормально, а на второй начинают рисоваться только те элементы, которые лежат на самой форме, то есть TLabel который в GroupBox'е не отображается. Иногда вообще пишет про ошибку создания формы на данном девайсе.

Как помочь горю?  smile
PM MAIL   Вверх
Alexeis
Дата 7.9.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ASGDeveloper, VCL объекты не являются потокобезопасными
Вероятно это результат конфликтов между главным потоком и одним из дополнительных. Простым решением является отправка сообщений из вторичных потоков главному. Можно использовать сообщения группы WM_USER + n, где n положительное число. Пусть работой с формой занимается главный поток и только он.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ASGDeveloper
Дата 7.9.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: 1
Всего: 1



Цитата(alexeis1 @  7.9.2006,  11:33 Найти цитируемый пост)
Простым решением является

ИМХО не подходит, так как на показанной форме юзер должен выполнить некоторые действия, а поток ждет, когда юзер их выполнить, поэтому ShowModal.

То, что библиотека VCL по сути однопоточна - я знаю, только почему оно работает?  smile 

Но дело не в этом, поэтому поясню подробнее. Программа внедряет в определенный набор программ некий модуль через madCodeHook. Когда в "зараженной" программе происходит некое событие в основную прогу отсылается сообщение через IPC и модуль ждет ответ. Прога показывает юзеру диалог, он вводит пару параметров, жмет кнопу и полетели дальше до следующего события. А ответ уходит в модуль.
PM MAIL   Вверх
Snowy
Дата 7.9.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(ASGDeveloper @  7.9.2006,  12:05 Найти цитируемый пост)
То, что библиотека VCL по сути однопоточна - я знаю, только почему оно работает?
Работает, но глючит - сам видишь.
Это всего лишь объект - никто не запрещает тебе его юзать.
Тебе лишь гарантируют глюки, т.к. управляется оно главным потоком.
Делай неVCL окно.
PM MAIL   Вверх
Teran
Дата 7.9.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(alexeis1 @  7.9.2006,  11:33 Найти цитируемый пост)
Можно использовать сообщения группы WM_USER + n, где n положительное число. Пусть работой с формой занимается главный поток и только он.

Верно сказано. При встрече в dll (прикрепленной с пом. madCodeHook) строки SendMessage - выполнение застопорится пока главная форма не даст ответа (Вот тебе и ShowModal). 


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Alexeis
Дата 7.9.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(ASGDeveloper @  7.9.2006,  12:05 Найти цитируемый пост)
То, что библиотека VCL по сути однопоточна - я знаю, только почему оно работает?

Потому что все компоненты переодически "общаются" друг с другом и в том числе с объектом приложения, при этом они прямо или косвено читают и меняют данные полей различных объектов, то же самое делает основной поток (он же не спит smile ) ну вот и возникают ошибки из-за совмесной потоконебезопастной работы с общей памятью - классика. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ASGDeveloper
Дата 7.9.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: 1
Всего: 1



Цитата(Snowy @  7.9.2006,  12:10 Найти цитируемый пост)
Делай неVCL окно. 

Ручками? Через CreateWindow?
PM MAIL   Вверх
Teran
Дата 7.9.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(ASGDeveloper @  7.9.2006,  12:39 Найти цитируемый пост)
Ручками? Через CreateWindow? 

http://forum.vingrad.ru/index.php?showtopi...37&view=all


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Snowy
Дата 7.9.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Или CreateDialog...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.