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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> многопоточность. вызов дополнительной формы. 
V
    Опции темы
ispro
  Дата 4.2.2012, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



имеется многопоточная программа, потоки в ней задаются пользовательски, т.е. количество потоков может быть любое.

кроме главной формы, есть еще дополнительная. в процессе выполнения потоками своей работы, вызывается дополнительная форма для ввода туда информации, после чего поток продолжает свою работу с полученными данными от дополнительной формы. потом другой поток открывает дополнительную форму и вводим снова туда информацию.

вызов формы делаю через процедуру синхронизации, при этом поток, вызвавший дополнительную форму, приостанавливает свою работу. после закрытия формы поток продолжает свою работу.

но у меня возникла проблема с обменом информации потока с дополнительной формой. последний поток, открывший доп. форму, как бы "перебивает" данные полученные ранее от потоков и выводится информация во всех открывшихся формах последнего потока. получает же информацию от формы, также только последний, открывший форму, поток.

также, так как форма еще не создана, я не могу передать данные в тот же компонент Img класса timage. создаю компонент динамически, все равно не передает данные-ошибка.

Код

f:=tformclass(findClass('TForm4'));
  b:=f.create(application);
  b.Caption:=login;
 
  img:=TImage.Create(Application);
  with img do
  begin
  Top:=16;
  Left:=16;
  Height:=74;
  Width:=212;
  end;
  b.InsertControl(img);
 
  b.img.Picture.LoadFromFile(name_pic);
  b.ActiveControl:=edites;
  b.Show;


а если заранее задать img и открыть уже в дополнительной форме:
Код

img.Picture.LoadFromFile(name_pic);

то как уже сказал отображается картинка только последнего потока.

подскажите, пожалуйста, как реализовать удачный обмен информации между дополнительной формой и всеми потоками программы.

примного благодарен!
PM MAIL   Вверх
bems
Дата 4.2.2012, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Не нужно трогать VCL из потоков без синхронизации. 
Нужно читать это


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ispro
Дата 5.2.2012, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bems @  4.2.2012,  18:59 Найти цитируемый пост)
Не нужно трогать VCL из потоков без синхронизации. 


может быть я вас не понял, но:

Цитата(ispro @  4.2.2012,  14:02 Найти цитируемый пост)
вызов формы делаю через процедуру синхронизации


PM MAIL   Вверх
bems
Дата 6.2.2012, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Да, верно, просто в коде я этого не увидел. Ты так путано объясняешь, что я ничего не понимаю. Покажи больше кода.
Сейчас вижу что ты думаешь что после b.InsertControl(img); img превратится в b.img, а это не так
Picture.LoadFromFile(name_pic) ты делаешь с другой картинкой


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ispro
  Дата 7.2.2012, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



проблема решена, тему, впринципе, можно закрывать, лишь хотел задать один вопрос.

Код

cs.Enter;
try
f:=tformclass(findClass('TForm4'));
b:=f.create(Application);
b.Caption:=name_pic;
b.ShowModal;
i_fresh:=b.Caption;
finally
b.Free;
end;
cs.Leave;


как видно из кода, обмен потока с дополнительной формой получился лишь с помощью caption дополнительной формы, так как при создании формы поток не видит ни компонента timage, ни edit.

заморачиваться особо не стал с поиском или динамическим созданием компонента на дополнительной форме, поэтому решил оставить так, НО, возможно, у вас будут какие-либо рациональные предложения по обмену данными с дополнительной формой из потока, не совсем "увеличивающие" код.

буду премного благодарен.
PM MAIL   Вверх
bems
Дата 7.2.2012, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



а зачем вообще FindClass? что мешает объявить f как TForm4, и делать f := TForm4.Create(Application)? тогда через переменную f будет доступно всё что нужно.
Еще в твоём коде если findClass кинет исключение, ты пытаешься сделать free несуществующему объекту. И в этом случае критическая секция останется занятой


--------------------
Обижено школьников: 8
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.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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