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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависание фрейма, создаваемого вручную. 
:(
    Опции темы
Ryoga
Дата 22.1.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: нет
Всего: 6



Итак, есть программа, часть которой представляет собой что-то вроде чата.
Чат этот многооконный, типо как в mirc'е, например.
Есть основной фрейм чата TChat, который содержит  TabControl, чтобы между окнами переключаться и список указателей на фреймы окон.
Фрейм окна TChatWindow, содержит всякие там текстовые поля, куда сообщения вводятся/выводятся, списки пользователей и т.д.
Так вот, в чём проблема...
Когда я создаю фрейм окна, посредством нажатия кпопки на основном фрейме чата, всё проходит нормально. Но когда фрейм окна создаётся в процедуре, вызываемой из потока, принимающего сообщения, новосозданный фрейм виснет.
Код создания используется и там и там один и тот же. Примерно такой...
Код

procedure TChat.AddFrame();
begin
      ...
      New(p);
      p^ := TСhatWindow.Create(self);
      p^.Initialize();
      p^.Align := alClient;
      p^.Users.Add(@pUser);
      TabControl.Tabs.Add(pUser^.name);
      TabControl.TabIndex := TabControl.Tabs.Count-1;
      FramesList.Add(p);
      p^.Parent := self;
      p^.Show();
      p^.BringToFront();
      ...
end;

При этом, если основное окно чата было скрыто, в момент прихода сообщения, то потом можно его открыть и всё работает нормально - фрейм добавился, всё переключается, ничего не виснет. Пробовал в процедуру Hide() и Show() добавлять для основного окна - не помогло.
Почему так происходит?
PM MAIL   Вверх
artsb
Дата 22.1.2010, 20:11 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А у вас вся работа из вспомогательного потока с основным организована через Synchronize?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ryoga
Дата 25.1.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: нет
Всего: 6



Походу, нет. Попробую понаставить критических секций на запись и функции отрисовки.
PM MAIL   Вверх
artsb
Дата 25.1.2010, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Попробуйте. Но вообще необходимость в Synchronize возникает только при работе с VCL.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ryoga
Дата 1.2.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 20.9.2005

Репутация: нет
Всего: 6



В общем, покопавшись в коде, решил, что сделать через Synchronize проще, чем критических секций наставлять. Переделал - фреймы создаются без ошибок. Правда там через некоторое время вылетает какое-то исключение, но это скорее всего не сильно связанные вещи - там ещё есть где багам развернуться.
Спасибо за помощь. Вообще странно, что сам сразу не дошёл до проверки на синхронизованность, благо уже как-то сталкивался с этой проблемой.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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