![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WM_QUIT
GuAV © (2004-12-25 15:10:00)В MSDN про WM_QUIT написано:
Do not post the WM_QUIT message using the PostMessage function; use PostQuitMessage.
С чего бы это ? Почему нельзя PostThreadMessage(ThdID, WM_QUIT, 0, 0); ?
GuAV (2004-12-25 17:08:00) [1]cпасибо.
default (2004-12-25 15:34:00) [2]"Вторая причина в том, чго этот флаг позволяет потоку закончить обработку остальных асинхронных сооб щений до завершения его цикла выборки сообщений. "
от себя добавлю - кроме того и синхронных тоже
вообще загляни в книгу там есть схема адгоритма выборки по ней всё просто понять
default (2004-12-25 15:27:00) [3]"Просмотрев очередь асинхронных сообщений, система, прежде чем перейти к проверке очереди виртуального ввода, проверяет флаг QS_QUIT Вспомните этот флаг устанавливается, когда поток вызывает PostQuitMessage. Вызов PostQuitMcssage дает примерно ют же эффект, что и вызов PostMessage, которая поме щает сообщение в конец очереди и тем самым заставляет обрабатывать его до про верки очереди ввода Так почему же PostQuitMessage устанавливает флаг вместо того, чтобы поместить WM_QUIT в очередь сообщений? На то есть две причины.
Во-первых, в условиях нехватки памяти может получиться так, что асинхронное сообщение нс удастся поместить в очередь Но, если приложение хочет завершиться, оно должно завершиться — тем более при нехватке памяти. Вторая причина в том, чго этот флаг позволяет потоку закончить обработку остальных асинхронных сооб щений до завершения его цикла выборки сообщений. Поэтому в следующем фрагмен
те кода сообщение WM_USER будет извлечено до WM_QUIT, даже если WM_USER асин хронно помещено в очередь после вызова PostQuitMessage.
case WM_CLOSE:
PostQuitMessage(0);
PostMessage(hwnd, WM_USER, 0, 0);"
Рихтер