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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужна ли синхронизация, ?! 
V
    Опции темы
z-END
Дата 27.2.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


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

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



собственно есть поток, в нем создается форма, нужна ли для этой формы синхронизация при доступе к ней из самого потока?
Код

  TmyThread = class(TThread)
{...}
  private
  MyFrm: TmyFrm;
{...}

constructor TmyThread.Create;
begin
  inherited Create (True);
  Priority :=  tpHigher;
  MyFrm := TMyForm.Create (nil);
end;

procedure TmyThread.Execute;
begin
MyFrm.Caption := 'Bla-Bla-Bla'; // <-- можно ли делать так?!
end;

У меня все сделано через синхронизацию, но я вот тут подумал, а нужна ли она вообще здесь?!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 27.2.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



По идее ничего страшного не произойдет, если сделать так.
Но если нужна гарантия, то лучше послать форме WM_SETTEXT.
Добавлено @ 11:36
Посмотрел код. Не зачем возиться с WM_SETTEXT.
Присвоение капшена и так его вызывает.
Можешь смело присваивать.
PM MAIL   Вверх
z-END
Дата 27.2.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


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

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



Snowy, я нетолько про кэпшен хотел узнатьsmile
а вобщем, можно ли обращаться к форме созданной в потоке, атакже ко всем контролам на ней (из самого потока) без синхронизации?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
<Spawn>
Дата 27.2.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



z-END, она нужна в том случае, если кто то в этот момент будет читать твой Caption.
Добавлено @ 12:01
Цитата(z-END @ 27.2.2006, 13:57)
Snowy, я нетолько про кэпшен хотел узнатьsmile
а вобщем, можно ли обращаться к форме созданной в потоке, атакже ко всем контролам на ней  (из самого потока) без синхронизации?

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


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
z-END
Дата 27.2.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


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

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



Цитата(<Spawn> @ 27.2.2006, 11:58 Найти цитируемый пост)
В результате чего без синхронизации вторичного потока с основным последствия могут быть абсолютно потрясающими

тоесть я правильно понимаю что форма созданная во вторичном потоке приложения "живет" всеравно в основном?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 27.2.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Все формы живут в основном.
А вот что у формы можно менять из внешнего потока, а что нельзя, нужно выяснять по коду VCL.
По крайней мере параметры окна (положение, текст и т.п. можно менять.)
PM MAIL   Вверх
<Spawn>
Дата 27.2.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Snowy, представь, что ты начал менять Caption формы из вторичного потока и успел написать туда "По" (а хотел "Поток") и в этот момент его выполнение прекращается и главный поток пишет строку "Форма", после чего возобновляется выполнение вторичного потока и он дописывает остаток "ток". В результате получаем "Фоток". Это желаемый результат?


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Snowy
Дата 27.2.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



<Spawn>, Представь, что ты посылаешь из другого приложения сообщение WM_SETTEXT.
Главный поток получает это сообщение и производит обновление заголовка. Пока он это не сделает, ничего другого он делать не будет.
Присваивание Caption'a не присваивает значение переменной. А вызывает Perform(WM_SETTEXT).
Получение Caption'a не берет данные из какой-то переменной, а делает WM_GETTEXT.
Все это делает главный поток. Вторичный поток замирает, ожидая, когда основной поток завершит действия и вернет управление.
Добавлено @ 12:51
Поэтому я и говорю, что некоторые действия можно делать вполне безболезненно.
PM MAIL   Вверх
Romikgy
Дата 27.2.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
<Spawn>
Дата 27.2.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Snowy, да, в данном случае оно так, видимо, и будет, но в случае изменения какой либо строки или массива (в общем то строка это и есть массивsmile ) можно будет получить этот самы эффект. Рельно же все может быть гораздо хуже. Я как то, будучи еще совсем молодым и зеленым в программировании, работал с формой из потока без синхрнизации - ошибки я отлавливал дольше чем писал весь проект...


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
z-END
Дата 27.2.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


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

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



Snowy, <Spawn>, спасибо=) ну вобщемто так и думал что нельзя...


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 27.2.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Отчего ж нельзя. Можно, но не все.
Для гарантии лучше конечно делать все в синхронизации.
Но многие вещи доступны и без нее.
PM MAIL   Вверх
Демо
Дата 28.2.2006, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Нельзя создать и работать с формами в дополнительном потоке. Увы, такова технология VCL-форм. Работать безопасно можно только с окнами, созданными на чистом Win32API.

Не стоит даже пытаться работать с формами. достаточно просто посмотреть на модуль Forms.pas изнутри. Можно даже по ключевому слову Application.


--------------------
    
PM MAIL ICQ Skype   Вверх
Romikgy
Дата 28.2.2006, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Демо @ 28.2.2006, 07:56 Найти цитируемый пост)
достаточно просто посмотреть на модуль Forms.pas изнутри

И что там такого страшного ?
Цитата(Демо @ 28.2.2006, 07:56 Найти цитируемый пост)
Можно даже по ключевому слову Application.

Как это относится к работе с формой ? smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Демо
Дата 28.2.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Цитата(Romikgy @ 28.2.2006, 09:35 Найти цитируемый пост)
Как это относится к работе с формой ?


Относится напрямую. Формы в Delphi неразрывно связаны с TApplication. Любая форма работает только в основном потоке.
Добавлено @ 10:00
На основной вопрос топика, естсетвенно, ответить нельзя. Потому что нельзя создавать формы в дополнительном потоке.
При желании можно, конечно. Но это если хочется проблем.


--------------------
    
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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