Модераторы: 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   Вверх
Romikgy
Дата 28.2.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Демо @ 28.2.2006, 08:59 Найти цитируемый пост)
Формы в Delphi неразрывно связаны с TApplication

где это выражено?
Добавлено @ 10:14
пример код плз и место откуда он


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

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


Эксперт
****


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

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



Создавать можно. Создание - всего лишь выделение памяти. А она общая.
А вот работать оно все равно будет в основном потоке, т.к. всем рулит главное окно - Application.
А оно в главном потоке.

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


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


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

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



Давайте разберемся , что есть форма? Это обычное окно виндов + дополнительные прибамбасы. Я прав?
Если да, то что есть окно - это графическое окно + ф-ция обработки сообщений этого окна, прав?
Если да , то кто мешает эту ф-цию засунуть в поток?
( Я так понимаю что все что мы кидаем в метод Exectute класса Tthread это и есть ф-ция которая выполняется отдельно от основного потока, да?
Тогда прямо в этом методе можно обозначить ф-цию типа WndProc, и юзать форму отдельно от апликейшена, если я не прав поправьте где?


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

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


Эксперт
***


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

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



Добавлено @ 11:00
Цитата(Romikgy @ 28.2.2006, 10:37 Найти цитируемый пост)
Это обычное окно виндов + дополнительные прибамбасы. Я прав?


Я бы сказал, что не совсем.

Цитата(Romikgy @ 28.2.2006, 10:37 Найти цитируемый пост)
Если да, то что есть окно - это графическое окно + ф-ция обработки сообщений этого окна, прав?
Если да , то кто мешает эту ф-цию засунуть в поток?


Весь смысл в том, что куды бы ты ни засунул эту функцию, все сообщения будут обрабатываться в основном потоке. Прежде всего.
Добавлено @ 11:06
Цитата(Romikgy @ 28.2.2006, 10:37 Найти цитируемый пост)
Тогда прямо в этом методе можно обозначить ф-цию типа WndProc, и юзать форму отдельно от апликейшена, если я не прав поправьте где?


Предлагаю попробовать на практике этот метод.
Сразу скажу, что придется
1. владельцем сделать Desktop
2. Все(абсолютно все!) сообщения обрабатывать вручную, от всех контролов на форме, которые хочется видеть.
3. По существу, это будет (почти) обычное окно WinAPI. НО! От TApplication никуда не денешься, а он НЕ ПОТОКОБЕЗАПАСЕН.

Обрати внимание на использование TApplication. ИСпользуется без всякой сипнхронизации в недрах VCL.

Хочу добавить, что этот вопрос я специально изучал. Ответ по использованию форм в отдельных потоках однозначно отрицательный. Честно - просто не хочу повторяться и переливать из пустого в порожнее. Предлагаю попробовать и самому убедиться.
И опять же отошлю к Forms.pas - там все видно прекрасно, как и где используются переменные и классы.

Это сообщение отредактировал(а) Демо - 28.2.2006, 11:00


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


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


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

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



Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
Я бы сказал, что не совсем.

Плз с объяснениями smile
Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
все сообщения будут обрабатываться в основном потоке

Обратно же почему?
Если имеется связь по родительскому окну, то
Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
владельцем сделать Desktop


Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
Обрати внимание на использование TApplication.


Цитата(Romikgy @ 28.2.2006, 09:13 Найти цитируемый пост)
где это выражено?
Добавлено @ 09:14
пример код плз и место откуда он


Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
Предлагаю попробовать на практике этот метод.

Это имхо самое правильное замечание smile только практика покажет где глюки бывают smile
Добавлено @ 11:13
Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
там все видно прекрасно, как и где используются переменные и классы.

Хоть одну ссылку дай на метод?


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

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


Эксперт
****


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

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



Цитата(Romikgy @ 28.2.2006, 10:37 Найти цитируемый пост)
Тогда прямо в этом методе можно обозначить ф-цию типа WndProc, и юзать форму отдельно от апликейшена, если я не прав поправьте где?
Поправляю.
Для TForm эта функция находится в Application.
Именно он получает сообщения, а потом раздает их нужным формам.
Именно поэтому TForm нельзя засунуть в отдельный поток.
Вот, если отказаться от VCL, то можешь выбрать другую процедуру обработки сообщений.
Я для TForm она предопределена.
PM MAIL   Вверх
Romikgy
Дата 28.2.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Snowy @ 28.2.2006, 10:14 Найти цитируемый пост)
TForm она предопределена

А перегрузить нельзя?
Цитата(Snowy @ 28.2.2006, 10:14 Найти цитируемый пост)
Для TForm эта функция находится в Application.
Именно он получает сообщения, а потом раздает их нужным формам.


Цитата(Демо @ 28.2.2006, 09:58 Найти цитируемый пост)
владельцем сделать Desktop

не проканает smile
smile smile


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

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


Эксперт
****


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

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



Грузи не грузи... Принцип действия такой.
TForm при создании регистрируется у Application.
Application получает за нее все сообщения, смотрит кому они адресованы и передает в оконную процедуру нужной формы.
То есть окна формы получают сообщения не сами - им их передает Application.
Тут тесная взаимосвязь с Application и я не представляю, как ее можно разорвать.
Если только код VCL править...
Добавлено @ 11:34
Отсюда и действие Application.ProcessMesages.
Именно Application разгребает все сообщения, а не формы.
Поэтому в длинных циклах виснут все окна, а не одно, если не делать ProcessMessages.
Так устроен VCL. Такова его архитектура...
Не скажу, что это минус - "умные существа делали". Но ограничений добавляет.
PM MAIL   Вверх
Romikgy
Дата 28.2.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ну подожди , апликейшен это тоже VCL и тоже окно имеющий свой хендл, и имхо сообщения передаются от родительского окна к дочернему, так ?
ЗЫ да и кстати , уходим мы от темы smile
сообщения то вооще то не зависят от потока smile
Да и обработка будет
Цитата(z-END @ 27.2.2006, 10:06 Найти цитируемый пост)
при доступе к ней из самого потока?

Добавлено @ 11:42
Цитата(Snowy @ 28.2.2006, 10:31 Найти цитируемый пост)
Поэтому в длинных циклах виснут все окна, а не одно, если не делать ProcessMessages.

Это понятно , если все выполняется в одном потоке smile

И мне так никто и не показал где в коде форм есть привязка к апликейшену smile


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

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


Эксперт
***


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

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



Цитата(Romikgy @ 28.2.2006, 11:40 Найти цитируемый пост)
И мне так никто и не показал где в коде форм есть привязка к апликейшену


Тебе весь Forms.pas выложить сюда?

Посмотри классы TScreen, TApplication, TCustomForm. Практически везде используются, во всех методах. БЕЗ учета многопоточности.


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


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


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

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



Цитата(Демо @ 28.2.2006, 10:53 Найти цитируемый пост)
Тебе весь Forms.pas выложить сюда?

нет , только ссылку где TCustomForm юзает TApplication, и все smile


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

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


Эксперт
***


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

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



Цитата(Romikgy @ 28.2.2006, 12:00 Найти цитируемый пост)
нет , только ссылку где TCustomForm юзает TApplication, и все


Да почти первая попавшаяся ссылка -
procedure TScreen.AlignForms(AForm: TCustomForm; var Rect: TRect);

Много где используются TForm/TCustomForm.


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


Эксперт
****


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

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



Цитата(Romikgy @ 28.2.2006, 11:40 Найти цитируемый пост)
Ну подожди , апликейшен это тоже VCL и тоже окно имеющий свой хендл, и имхо сообщения передаются от родительского окна к дочернему, так
Не обязательно. Как закажем.
Вот VCL заказывает строгую иерархию - от Application формам и т.д.

Цитата(Romikgy @ 28.2.2006, 11:40 Найти цитируемый пост)
сообщения то вооще то не зависят от потока

Сообщения нет. А их обработка да.

Цитата(Romikgy @ 28.2.2006, 11:40 Найти цитируемый пост)
Это понятно , если все выполняется в одном потоке
А все и выполняется в одном потоке.
Application ловит сообщение и передает принятое сообщение форме.
Не посылает, а передает. В своем потоке.

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


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


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

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



Цитата(Демо @ 28.2.2006, 11:11 Найти цитируемый пост)
procedure TScreen.AlignForms

где здесь
Цитата(Демо @ 28.2.2006, 11:11 Найти цитируемый пост)
Цитата(Romikgy @ 28.2.2006, 12:00 Найти цитируемый пост)
нет , только ссылку где TCustomForm юзает TApplication, и все

Или я не правильно вопросы задаю или .....
Добавлено @ 12:23
Цитата(Snowy @ 28.2.2006, 11:12 Найти цитируемый пост)
заказывает строгую иерархию

Кто мешает поменять заказ?
Цитата(Snowy @ 28.2.2006, 11:12 Найти цитируемый пост)
передает.

Это вызывает соответсвующую ф-цию?


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

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


Эксперт
****


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

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



Это не Form юзает Application, а наоборот.

Цитата(Romikgy @ 28.2.2006, 12:19 Найти цитируемый пост)
Кто мешает поменять заказ?
Ты готов сам ловить все сообщения и передавать их во внутренней структуре VCL?
Учитывая, что она может поменяться в следующей версии?
Учитывая, что после всех трудов это может вообще не заработать?
Учитывая, что вероятность получения глюков - 90%?
Если готов - пробуй.
PM MAIL   Вверх
Демо
Дата 28.2.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Romikgy @ 28.2.2006, 12:19 Найти цитируемый пост)
Или я не правильно вопросы задаю или .....


Исходи из того, что не TCustomForm использует, а наоборот, её юзают.


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


Эксперт
****


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

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



Цитата(Romikgy @ 28.2.2006, 12:19 Найти цитируемый пост)
Это вызывает соответсвующую ф-цию?
Именно. Мы вызываем метод TForm и отдаем ему сообщение.
PM MAIL   Вверх
Romikgy
Дата 28.2.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Что я нашел в формах
Код

procedure TCustomForm.CreateParams(var Params: TCreateParams);

WndParent := Application.Handle;


Более об Application, упоминаний нет ( при создании окна)
Добавлено @ 12:40
Цитата(Snowy @ 28.2.2006, 11:31 Найти цитируемый пост)
Ты готов сам ловить все сообщения и передавать их во внутренней структуре VCL?
Учитывая, что она может поменяться в следующей версии?
Учитывая, что после всех трудов это может вообще не заработать?
Учитывая, что вероятность получения глюков - 90%?
Если готов - пробуй.

Тобишь сделать можно , но дабы не усложнять себе жизнь так не делают!

Так правильно?


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

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


Эксперт
****


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

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



Цитата(Romikgy @ 28.2.2006, 12:33 Найти цитируемый пост)
Тобишь сделать можно
Теоретически можно все сделать.

Цитата(Romikgy @ 28.2.2006, 12:33 Найти цитируемый пост)
но дабы не усложнять себе жизнь так не делают
Согласись, что проще делать синхронизацию, чем городить огород с отделением TForm от TApplication.
Добавлено @ 12:48
Цитата(Romikgy @ 28.2.2006, 12:33 Найти цитируемый пост)
Более об Application, упоминаний нет ( при создании окна)
Смотри код
constructor TCustomForm.CreateNew(AOwner: TComponent; Dummy: Integer);
в самом низу строка:
Screen.AddForm(Self);
Это и есть регистрация формы.

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


Эксперт
***


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

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



Цитата(Romikgy @ 28.2.2006, 12:33 Найти цитируемый пост)
Так правильно?


Нет, неправильно.

TApplication и TScreen используют методы форм, созданных в приложении, без синхронизации.

Я бы увеличил вероятность глюков дло 100% без всяких оговорок.


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


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


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

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



Цитата(Snowy @ 28.2.2006, 11:45 Найти цитируемый пост)
Теоретически можно все сделать.

почему теоретически?
Цитата(Snowy @ 28.2.2006, 11:45 Найти цитируемый пост)
Согласись, что проще делать синхронизацию, чем городить огород с отделением TForm от TApplication.

Да на все 100% smile
Добавлено @ 12:59
Демо,
Код

procedure TApplication.CreateHandle;
 FHandle := CreateWindow(WindowClass.lpszClassName, PChar(FTitle),
      WS_POPUP or WS_CAPTION or WS_CLIPSIBLINGS or WS_SYSMENU
      or WS_MINIMIZEBOX,
      GetSystemMetrics(SM_CXSCREEN) div 2,
      GetSystemMetrics(SM_CYSCREEN) div 2,
      0, 0, 0, 0, HInstance, nil);
 SetWindowLong(FHandle, GWL_WNDPROC, Longint(FObjectInstance));


Я так понимаю вы это имели ввиду, что апликейшен создает окно а не форм?
но последнюю строку никто не отменял, и вызвав ее еще раз но с другим FObjectInstance, который будет в потоке, и все будет работать без проблем smile Одно но
Цитата(Snowy @ 28.2.2006, 11:45 Найти цитируемый пост)
городить огород

никому не хоцца
Цитата(Snowy @ 28.2.2006, 11:45 Найти цитируемый пост)
Screen.AddForm(Self);

Код

procedure TScreen.AddForm(AForm: TCustomForm);
begin
  FCustomForms.Add(AForm);
  if AForm is TForm then
  begin
    FForms.Add(AForm);
    Application.UpdateVisible;
  end;
end;


Это не регистрация для винды, FForms это список, это регестрация внутренней структуры


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

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


Эксперт
****


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

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



Цитата(Romikgy @ 28.2.2006, 12:49 Найти цитируемый пост)
Теоретически можно все сделать.QuoteEndQuoteEEndпочему теоретически?
Потому что практически сделать ВСЕ невозможно smile

Цитата(Демо @ 28.2.2006, 12:49 Найти цитируемый пост)
Я бы увеличил вероятность глюков дло 100% без всяких оговорок.
Вот о том и речь, чтобы отрезать от TForm все взаимодействия с TScreen и TApplication. Теоретически это возможно. Но практически я бы даже и пытаться не стал бы.

P.S. затянулась наша теоретическая дискуссия.
Добавлено @ 13:03
Цитата(Romikgy @ 28.2.2006, 12:49 Найти цитируемый пост)
Это не регистрация для винды

Это регистрация у TApplication - чтобы она сообщения отдавала
PM MAIL   Вверх
Romikgy
Дата 28.2.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Snowy @ 28.2.2006, 12:02 Найти цитируемый пост)
Потому что практически сделать ВСЕ невозможно

почему? smile Я даже где то видел такую подпись:
"Я бы изменил мир , но Бог исходники не дает" (с) не помню автора

Цитата(Snowy @ 28.2.2006, 12:02 Найти цитируемый пост)
затянулась наша теоретическая дискуссия.

Согласен заворачиваем с этим smile


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

PM   Вверх
Страницы: (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.0964 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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