![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
собственно есть поток, в нем создается форма, нужна ли для этой формы синхронизация при доступе к ней из самого потока?
У меня все сделано через синхронизацию, но я вот тут подумал, а нужна ли она вообще здесь?! -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
По идее ничего страшного не произойдет, если сделать так.
Но если нужна гарантия, то лучше послать форме WM_SETTEXT. Добавлено @ 11:36 Посмотрел код. Не зачем возиться с WM_SETTEXT. Присвоение капшена и так его вызывает. Можешь смело присваивать. |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Snowy, я нетолько про кэпшен хотел узнать
а вобщем, можно ли обращаться к форме созданной в потоке, атакже ко всем контролам на ней (из самого потока) без синхронизации? -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
z-END, она нужна в том случае, если кто то в этот момент будет читать твой Caption.
Добавлено @ 12:01
Не советую, т.к. форма же довольно активное создание -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
тоесть я правильно понимаю что форма созданная во вторичном потоке приложения "живет" всеравно в основном? -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Все формы живут в основном.
А вот что у формы можно менять из внешнего потока, а что нельзя, нужно выяснять по коду VCL. По крайней мере параметры окна (положение, текст и т.п. можно менять.) |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Snowy, представь, что ты начал менять Caption формы из вторичного потока и успел написать туда "По" (а хотел "Поток") и в этот момент его выполнение прекращается и главный поток пишет строку "Форма", после чего возобновляется выполнение вторичного потока и он дописывает остаток "ток". В результате получаем "Фоток". Это желаемый результат?
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
<Spawn>, Представь, что ты посылаешь из другого приложения сообщение WM_SETTEXT.
Главный поток получает это сообщение и производит обновление заголовка. Пока он это не сделает, ничего другого он делать не будет. Присваивание Caption'a не присваивает значение переменной. А вызывает Perform(WM_SETTEXT). Получение Caption'a не берет данные из какой-то переменной, а делает WM_GETTEXT. Все это делает главный поток. Вторичный поток замирает, ожидая, когда основной поток завершит действия и вернет управление. Добавлено @ 12:51 Поэтому я и говорю, что некоторые действия можно делать вполне безболезненно. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
Имхо если все ф-ции формы, будут пренадлежать потоку, то и сообщения от формы будут обрабатыватся в потоке,
и если с формой кроме тя никто работать не будет то можно и без синхронизации, но имхо лучше с ней, "береженого бог бережет , - сказала монашка натягивая. ... " (с) Анектод -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Snowy, да, в данном случае оно так, видимо, и будет, но в случае изменения какой либо строки или массива (в общем то строка это и есть массив
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Snowy, <Spawn>, спасибо=) ну вобщемто так и думал что нельзя...
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Отчего ж нельзя. Можно, но не все.
Для гарантии лучше конечно делать все в синхронизации. Но многие вещи доступны и без нее. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Нельзя создать и работать с формами в дополнительном потоке. Увы, такова технология VCL-форм. Работать безопасно можно только с окнами, созданными на чистом Win32API.
Не стоит даже пытаться работать с формами. достаточно просто посмотреть на модуль Forms.pas изнутри. Можно даже по ключевому слову Application. -------------------- |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
И что там такого страшного ? Как это относится к работе с формой ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Относится напрямую. Формы в Delphi неразрывно связаны с TApplication. Любая форма работает только в основном потоке. Добавлено @ 10:00 На основной вопрос топика, естсетвенно, ответить нельзя. Потому что нельзя создавать формы в дополнительном потоке. При желании можно, конечно. Но это если хочется проблем. -------------------- |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |