|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.02.2012, 15:04 | #1 |
Пользователь
Регистрация: 04.02.2012
Сообщений: 21
|
многопоточность. вызов дополнительной формы.
имеется многопоточная программа, потоки в ней задаются пользовательски, т.е. количество потоков может быть любое.
кроме главной формы, есть еще дополнительная. в процессе выполнения потоками своей работы, вызывается дополнительная форма для ввода туда информации, после чего поток продолжает свою работу с полученными данными от дополнительной формы. потом другой поток открывает дополнительную форму и вводим снова туда информацию. вызов формы делаю через процедуру синхронизации, при этом поток, вызвавший дополнительную форму, приостанавливает свою работу. после закрытия формы поток продолжает свою работу. но у меня возникла проблема с обменом информации потока с дополнительной формой. последний поток, открывший доп. форму, как бы "перебивает" данные полученные ранее от потоков и выводится информация во всех открывшихся формах последнего потока. получает же информацию от формы, также только последний, открывший форму, поток. также, так как форма еще не создана, я не могу передать данные в тот же компонент Img класса timage. создаю компонент динамически, все равно не передает данные-ошибка. Код:
а если заранее задать img и открыть уже в дополнительной форме: Код:
подскажите, пожалуйста, как реализовать удачный обмен информации между дополнительной формой и всеми потоками программы. примного благодарен! |
04.02.2012, 15:33 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
в потоков задать свойства через property и передать в них все необходимое ДО запуска потоков.
|
04.02.2012, 16:46 | #3 | |
Пользователь
Регистрация: 04.02.2012
Сообщений: 21
|
Цитата:
в доп. форму необхдимо передать следующие данные: name_u, name_pic, от формы потоку необходимо получить result. передать через property я пожалуй смогу, но до запуска потока...и получить от формы в нужный поток, необходимые данные, опять проблема. я в принципе организовал необходимую функцию программы другим способом, НО хочется для саморазвития все-таки сделать так как хотел ранее. примного благодарен! |
|
07.02.2012, 16:34 | #4 |
Пользователь
Регистрация: 04.02.2012
Сообщений: 21
|
проблема решена, тему, впринципе, можно закрывать, лишь хотел задать один вопрос.
Код:
заморачиваться особо не стал с поиском или динамическим созданием компонента на дополнительной форме, поэтому решил оставить так, НО, возможно, у вас будут какие-либо рациональные предложения по обмену данными с дополнительной формой из потока, не совсем "увеличивающие" код. буду премного благодарен. |
07.02.2012, 17:01 | #5 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
Код:
Код:
Код:
Код:
тоже что и у тебя но переменная b объявляется в закрытой (private) облcnb данных класса потока. но показывать и общаться с ней все равно надо через synchronize.
программа — запись алгоритма на языке понятном транслятору
|
07.02.2012, 18:29 | #6 |
Пользователь
Регистрация: 04.02.2012
Сообщений: 21
|
сделал через синхронизацию следующим образом:
Код:
предполагаю, что до открытия формы(showmodal), программа успевает подставлять имя из другого потока, в случае с критической секцией такого нет, так как пока критичесая секция занята, другой поток не может туда "зайти". можно ли как решить эту проблему при синхронизации? |
07.02.2012, 19:11 | #7 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
что есть переменная b? (где определена)?
в приведенном примере можно ее вполне сделать локальной переменной функции. Локальность даст возможность каждому потоку работать толлько со своей формой. вероятно просто несколько форм (из разных потоков) показываютя одновременно на одном и том же месте. попробуй для разных потоков задать разные положенbя форм. form.left:= form.top:=
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 07.02.2012 в 19:14. |
07.02.2012, 21:50 | #8 |
Пользователь
Регистрация: 04.02.2012
Сообщений: 21
|
переменная b:
Код:
да, действительно, вы правы открывалось несколько окон, но также и повторялись картинки в дополнительной форме. открытие нескольких окон поборол "извращенским" способом: Код:
а одни те же картинки иногда показывались потому что имя картинки, в период тестирования программы, задавал следующим образом: Код:
Код:
Код:
|
08.02.2012, 09:19 | #9 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
есть мнение что возможно пересмотреть алгоритм работы в целом.
Цитата:
Цитата:
Код:
и многих-многоих форм Цитата:
программа — запись алгоритма на языке понятном транслятору
|
|||
09.02.2012, 22:25 | #10 | |
Пользователь
Регистрация: 04.02.2012
Сообщений: 21
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Многопоточность, обратный вызов | BOBAH13 | Свободное общение | 0 | 11.12.2011 03:24 |
Вызов формы 2 и активация формы 1 | xRamzeSx | Общие вопросы Delphi | 2 | 12.01.2011 08:13 |
Создание и вызов формы из консоли | Gr1ng0 | Общие вопросы C/C++ | 5 | 26.11.2010 09:54 |
открытие картинки без дополнительной формы | grom333 | Помощь студентам | 9 | 12.01.2010 19:56 |
Вызов формы в C++ | Скарам | Помощь студентам | 4 | 07.10.2009 17:33 |