|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
|
Ryoga |
|
|||
Опытный Профиль Группа: Участник Сообщений: 262 Регистрация: 20.9.2005 Репутация: нет Всего: 6 |
Итак, есть программа, часть которой представляет собой что-то вроде чата.
Чат этот многооконный, типо как в mirc'е, например. Есть основной фрейм чата TChat, который содержит TabControl, чтобы между окнами переключаться и список указателей на фреймы окон. Фрейм окна TChatWindow, содержит всякие там текстовые поля, куда сообщения вводятся/выводятся, списки пользователей и т.д. Так вот, в чём проблема... Когда я создаю фрейм окна, посредством нажатия кпопки на основном фрейме чата, всё проходит нормально. Но когда фрейм окна создаётся в процедуре, вызываемой из потока, принимающего сообщения, новосозданный фрейм виснет. Код создания используется и там и там один и тот же. Примерно такой...
При этом, если основное окно чата было скрыто, в момент прихода сообщения, то потом можно его открыть и всё работает нормально - фрейм добавился, всё переключается, ничего не виснет. Пробовал в процедуру Hide() и Show() добавлять для основного окна - не помогло. Почему так происходит? |
|||
|
||||
artsb |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
А у вас вся работа из вспомогательного потока с основным организована через Synchronize?
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Ryoga |
|
|||
Опытный Профиль Группа: Участник Сообщений: 262 Регистрация: 20.9.2005 Репутация: нет Всего: 6 |
Походу, нет. Попробую понаставить критических секций на запись и функции отрисовки.
|
|||
|
||||
artsb |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Попробуйте. Но вообще необходимость в Synchronize возникает только при работе с VCL.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Ryoga |
|
|||
Опытный Профиль Группа: Участник Сообщений: 262 Регистрация: 20.9.2005 Репутация: нет Всего: 6 |
В общем, покопавшись в коде, решил, что сделать через Synchronize проще, чем критических секций наставлять. Переделал - фреймы создаются без ошибок. Правда там через некоторое время вылетает какое-то исключение, но это скорее всего не сильно связанные вещи - там ещё есть где багам развернуться.
Спасибо за помощь. Вообще странно, что сам сразу не дошёл до проверки на синхронизованность, благо уже как-то сталкивался с этой проблемой. |
|||
|
||||
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |