Обработка WM_CLOSE
На сколько я понимаю, современная концепиця обработки событий от пользователя заключается в периодическом получении сообщений от внешних устройств, которые локализуются приложенеим в сообщения от гуёвых гаджетов и устройств, и заносятся в некий стек уникальный для каждого процесса на момент его выполнения.
В процессе своей работы процесс периодически черпает сообщения из стека и выполняет проассоциированную с ними функцию (карта сообщений в MFC [которая, насколько мне известно, являетя макро-командой и разворачиывается в соответсвтующий код]), или обновляет состояние внутренних переменных, наткнувшись на соответствующий запрос ( MouseHitи подобные в Blitz). После чего сообщение удаляется. Причём, входе обработки могут быть порождены новые сообщения (WM_CLOSE вызывает WM_DESTROY и WM_NCDESTROY [они провоцируются ф-цией DestroyWindow( ), которая была взывана ф-цией OnClose() - обработчиком для WM_CLOSE]). Если Windows в ходе выполнения процесса обнаруживает "застой" в обработке сообщений (пользователь судорожно колошматит по зависшей форточке - а та выполняет громоздкий цикл, и, соответвенно, сейчас не происходит анализ сообщений - стек продолжает увеличиваться) - то она предлагает пользователю принудительно завершить работу приложения, обозначив её как "не отвечает". Теперь вопрос: В каких дебрях спрятана обработка события WM_CLOSE в прогах, скомпиленных Blitz3D. Ведь программа закрывается штатно, даже если она была прервана на выполнении цикла! Значит обработка сообщения происходит не при вызове соответствующих функий опроса (как было предположено выше), а отдельно - причём не понятно где: ну не через команду же прога это делает? И ещё вопрос - как эффиктивнее всего реализовать перехват закрытия через WM_CLOSE на б3д? |
Re: Обработка WM_CLOSE
Вложений: 2
impersonalis
про мультипоточность не думал ? :) в bmax к примеру system hook висит отдельным потоком тоесть и в blitz3d тоже все mousehit\keyhit обновляются отдельно в общем есть либа которая перехватывает сообщение WM_CLOSE для тебя специально потратил 40 секунд копаясь в архивах :) в общем смотри атач, ето не особо то что тебе надо но я думаю поймеш в какую сторону копать надо |
Re: Обработка WM_CLOSE
Цитата:
|
Re: Обработка WM_CLOSE
2jimon
хочешь сказать что программа выполняется как два коррелирующих процесса, т.е. две эдаких квази-проги? |
Re: Обработка WM_CLOSE
impersonalis
тип того :) |
Re: Обработка WM_CLOSE
ГЫ, в этом BlitzClose тоже оконная функция-перехватчик ставится. А исходник-то какой ужасный.
|
Часовой пояс GMT +4, время: 18:36. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot