![]() |
|
|
![]()
|
|
| JoyEx |
|
||||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Сишный оконный класс всего лишь обслуживает настоящее Windows окно (subклассит), очередь сообщений есть у GUI-потока, она "прокручивается" всегда примерно вот так:
Там, где есть окно там и есть GUI поток.
ну да, чтобы не было deadlock (взаимоблокировки). -------------------- Если ты уже никого не боишься, значит ты самый страшный |
||||
|
|||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Вот, наконец-то я тогда начинаю понимать, почему не вызываются события сокета - потому что собственно некому их вызывать...
Ладно, щас попробуем все еще и в потоковые классы завернуть. Была у меня конечно идея использовать синхронный сокет (который CSocket), но там заче-то надо порождать классы CArchive, СSocketFile, по-моему, слишком тяжеловесно. Думаю, получится написать свой синхронный сокет, благо мне не та много от него надо. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Dreamer_0x01
Зачем переделывать код? Надо всего лишь "прокачать" очередь сообщений, чтобы сообщения были обработаны родной оконой процедурой какого-то окна, а потом продолжать чё-то свое делать. -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Это как? Притащить в оно цепочку указателей на мой сокет, и там принудительно сделать его DispatchMessage ? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Нет.
С помощью PeekMessage()-TranslateMessage()-DispatchMessage() можно "прокачать" очередь в любом месте потока. Добавлено @ 20:26
-------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Не понимаю, в какое именно место мне надо такой код добавить?
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
там, где у тебя долго выполняется код Пока! Это сообщение отредактировал(а) JoyEx - 23.12.2005, 20:44 -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
ВАХ! ну наконец-то заработало!
Единственное...поясни пожалуйста, почем в PeekMessage в качестве дескриптера окна передается NULL. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| JoyEx |
|
||||||||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Чтобы вытаскивать из очереди сообщения всех окон данного потока, вот что пишут $M:
PeekMessage() в отличие от GetMessage() "прокачивает" очередь, т.е. если в очереди нету сообщений PeekMessage() возвращает управление (=0), а GetMessage() только при получении WM_QUIT. Вот тебе мой макет
Это ф-ция потока:
-------------------- Если ты уже никого не боишься, значит ты самый страшный |
||||||||
|
|||||||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Что ж, ты мне этой штукой (конструкцией с PeekMessage)очень помог, причем как выяснилось, не тоьлко в сокетах, а вообще в большинстве мест, где моя программа "подтормаживала".
Спасибо. Репутация "+". -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Dreamer_0x01, спасибо.
Для справки: В MS VС++ из Class View v7 очень удобно и быстро можно попасть на базовый класс (и его .cpp) через "Bases and Interfaces". -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |