Вы можете поместить сообщение в очередь сообщений, используя функцию PostMessage. PostMessage помещает сообщение в конце очереди сообщений потока и возвращает значение немедленно, не ожидая когда поток обработает сообщение. Параметры функции включают в себя дескриптор окна, код сообщения и два параметра сообщения. Система копирует эти параметры в структуру MSG, заполняет члены структуры time и pt и помещает структуру в очередь сообщений.
Система использует дескриптор окна, передаваемый с функцией PostMessage, чтобы выявить, какая очередь сообщений потока должна получить сообщение. Если дескриптор - HWND_TOPMOST, система помещает сообщение в очередь сообщений потоков всех окон верхнего уровня.
Вы можете использовать функцию PostThreadMessage, чтобы поместить сообщение в очереди сообщений заданного потока. PostThreadMessage является похожа на функцию PostMessage, кроме первого параметра, который идентификатор потока, а не дескриптор окна. Вы можете получить идентификатор потока при помощи вызова функция GetCurrentThreadId.
Используйте функцию PostQuitMessage, чтобы выйти из цикла сообщений. PostQuitMessage помещает в очередь сообщение WM_QUIT для выполнения текущим потоком . Когда цикл сообщений потока сталкивается с сообщением WM_QUIT, он завершает работу и возвращает управление системе. Приложение обычно вызывает PostQuitMessage в ответ на сообщение WM_DESTROY , как показано в ниже следующем примере.
case WM_DESTROY: // Выполнение задач по очистке. PostQuitMessage(0); break; |