Space писал(а):ну и что? Я перебираю потоки, шлю им WM_QUIT и проги спокойно завершаются. Я использую эту фишку для таких простых прог без окон, которые я раньше писал на Асме и пишут другие люди. Мне просто интересно, нормально ли будут завершаться проги с окнами по этому же методу, т.е. завершаться вообще без подвисов. Как показал тест, нормально. Я не знаю точную схему обработки сообщений на отрезке ПРОЦЕСС-ПОТОКИ-ОКНА, поэтому и интересуюсь.
Space писал(а):Я просто думал, что посыл WM_QUIT по окнам приведёт к Unload Form, что будет несколько более корректным завершением, чем посыл WM_QUIT по потокам, однако, как показал тест, Блокнот завершается при получении WM_QUIT и наличии диалогового окна о сохранении данных с потерей данных. Поэтому я пока остановился на более универсальной процедуре посыла WM_QUIT потокам. Мне просто нужно 100% завершить прогу, но наиболее корректно.
Хакер писал(а):SLIM не прав, ни WindowProc вызывает DispatchMessage, а неаоборот. Но к WM_QUIT, как я сказал выше, это не относится.
Space писал(а):послать WM_QUIT окну, его получит первым поток?!
The WM_QUIT message is not associated with a window and therefore will never be received through a window's window procedure. It is retrieved only by the GetMessage or PeekMessage functions.
Do not post the WM_QUIT message using the PostMessage function; use PostQuitMessage.
А окна закрываются, т.к. завершается вся прога, как при End в Бейсике? Или происходит при этом корректная выгрузка форм, как на Unload Me? Мабудь, нет.
Ничего не будетЯ не знаю, что будет, если послать WM_QUIT окну.
О чём я тя и спрашиваю. Мне надо понять разницу, чтобы выявить преимущества и недостатки.В механизмах и сайд-эффектах, большая
Space писал(а):будет завершение проги (проверено).
Потому что я проверял SendMessage hwnd, wm_quit. Ни-че-го.
Вообщето мне всегда казалось что это сообщение - документированный способ потоку из обработчкиа сообщений сообщить своему собственному циклу о том что надо завершаться. Иными словами - WM_QUIT вообще нужен только для использования внутри потока, а не для того что бы корректно чтото делатьWM_QUIT это документированный способ оповестить поток о том, что пора бы ему закончить крутиться в цикле обработки сообщений
Вообщето мне всегда казалось что это сообщение - документированный способ потоку из обработчкиа сообщений сообщить своему собственному циклу о том что надо завершаться. Иными словами - WM_QUIT вообще нужен только для использования внутри потока, а не для того что бы корректно чтото делать
В этом случае сообщение ставится в очередь потока и до окна даже не доходит. А SendMessage непосредственно вызывает оконную процедуру, которая на WM_QUIT не реагирует.ANDLL писал(а):А теперь PostMessage и то же самое.
- Код: Выделить всё
Потому что я проверял SendMessage hwnd, wm_quit. Ни-че-го.
Кто тебе такой идиотизм сказал? И ты ведь понимаешь что это идиотизм, потому что такого просто быть не может? Учитывая, что ты посылаешь сообщение в другой поток(что следует из условия топика, если ты не прочитал)?А SendMessage оправляет сообщение непосредственно оконной процедуре, которая на него не реагирует.
Еще будут идиотские вопросы?MSDN писал(а):The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message.
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 20