![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
мне нужно из потока обратиться к св-вам формы.
для этого предусмотрен метод Synchronize(); - жутко неудобная вещь... я тут подумал, если уж поток "не знает" о форме из которой он запущен, но он ведь может достучаться до окна по его идентификатору? т.е. абсолютная адресация. как такое реализовать? |
![]() |
![]() |
![]() |
#2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
ну так я вроде и спросил, как это сделать.
или нет? я видите ли не читал толстую книжку про поотоки, так, хапнул с какого-то форума небольшой пример. ну так как все-таки сказать потоку в какой форме он запущен? хотя, я может неправильно выразился... мне нужен доступ из потока к компонентам формы, StringGrid например. подскажите? =) ОБОЖЕМОЙ!!! как все оказалось просто! ыыыы *me бъется башкой об стенку вот скажите мне тупому, господа профессионалы, зачем нужна вся эта канитель с синхронизацией: Synchronize(SendData); если можно просто в потоке написать form1.label.caption('превед медвед!'); и будет работать, проверял! ыыы =) У нас принято оформлять код специальным тэгом - при помощи кнопочки "#". Только... И не значком #. И не РНР-кодом. И не значком цитаты. И не собственными "ручками". Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе... Модератор З.Ы. Не похоже, что понял. Если б понял, то не хамил бы, а исправил... Последний раз редактировалось mihali4; 15.11.2010 в 18:27. Причина: да ладно, ладно, понял =) |
![]() |
![]() |
![]() |
#4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Вы программирование хотите освоить "методом тыка"?
Уверяю, "вумную" литературу читать придется. И чем раньше, тем лучше. И перечитывать несколько раз тоже придется... |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
посмотрите мои примеры(и не тока мои) с полями потоков.
переопределяется конструктор для этого. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 01.12.2009
Сообщений: 569
|
![]()
Ибо к форме обращается и процесс, то может возникнуть ситуация, когда в кусок памяти (это может быть что угодно и строка тоже, уважаемый xrob) записывает процесс свои данные и в момент когда он их ещё не дописал, система передаёт управление потоку (в том и фишка, что процессорное время у всех своё, а память одна!) и тот считая, что процесс данные обновил, начинает их модифицировать (даже если будет просто читать). В итоге получается коллизия... И всё это добро может закончится совершенно не предсказуемо.
Исходя из выше сказанного, такой процесс обработки называется асинхронным. И если, скажем, в операциях ввода-вывода (а они, кстати, очень медленные и слегка "притормаживают" сам процесс своими неизбежными задержками) это вполне приемлемо, то в графике это используется ооочень редко. Однако где бы не использовались потоки, при обмене информации между ними и, сбсно, процессом и любым потоком, нужно применять принудительную синхронизацию, иначе алгоритмы программы "улетят в космос" (и лови их потом, ибо очень трудно отладить эти "вытягивающие мозги и время" куски кода). Для синхронизации под виндовс применяются "критические секции" (на самом деле это один из методов и самый простой). Она открывается (Enter) и закрывается (Leave) одним единственным потоком или процессом. Если, например, в момент открытия потоком критической секции, её пытается открыть конкурент, то он неизбежно зависнет, пока секцию не закроет текущий, открывший владелец. Таким образом регулируется синхронизация чтения и записи куска памяти разными потоками. Последний раз редактировалось notHaker; 15.11.2010 в 02:47. |
![]() |
![]() |
![]() |
#7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Ничего, Титаник, не горюй. Еще получишь опыт с потоками когда агромную гулю набьешь себе ![]()
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
да ладно, для моих целей сойдет! =)
ибо у меня только один поток, который время от времени продвигает прогрессбар в форме, да дописывает пару строчек в stringGrid. мне поток нужен только для того чтоб форма не висела во время работы программы а как я понял из ваших объяснений может произойти следующее: Код:
ну у меня такое исключено, так что все норм =) спасибо за участие. p.s. да и потом хрен с ним! если будет глючить сделаю с синхронизацией! я уже разработал систему как можно наиболее адекватно передавать данные в форму =) надо вызвать только одну процедуру, а не по 10 прописывать для каждого label1... Последний раз редактировалось xrob; 14.11.2010 в 23:25. |
![]() |
![]() |
![]() |
#9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]()
I'm learning to live...
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Suspend и Resume в потоках (C#) | lot555 | C# (си шарп) | 0 | 31.10.2010 20:37 |
Считывание значений переменных в потоках | Руслантус | Общие вопросы .NET | 1 | 09.09.2010 15:39 |
Чтение файла в нескольких потоках | DarkEvil | Общие вопросы Delphi | 7 | 30.11.2009 12:06 |