Чем отличаются функции SendMessage и PostMessage?
3 Answers
(Уточнение-комментарий к ответу @Asen)
И
PostMessage, иSendMessage, если пользоваться вашей терминологией, "шлют сообщение сразу", поскольку единственное, куда можно отослать сообщения (за исключением Nonqueued messages) - это в некоторую внутреннюю очередь.Это реализовано так, поскольку в противном случае решение
race conditionsтипа "50 потоков одновременно послали сделалиSendMessage" стало бы очень проблематичным.Самое главное, что нужно было написать про эти функции - это то, что
SendMessageдожидается обработки сообщения и возвращает результат, аPostMessageпросто кладет сообщение в очередь и совершенно не заботится о том, что произойдет дальше.Последний факт, кстати говоря, заметен из их сигнатур:
BOOL WINAPI PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); LRESULT WINAPI SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
- 23,562
PostMessage - Ставит сообщение в очередь, и код выполняется дальше.
SendMessage - Функция SendMessage шлет сообщение сразу
- 13,629