У меня есть устаревшее приложение, которое я поддерживаю, которое вызывает PostMessage(NULL,WM_CLOSE,0,0);
в определенных местах. Глядя на код, я не могу догадаться, связан ли он со следующим (выполненным в другом потоке),
MSG msg;
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) {
if ( msg.message == WM_CLOSE)
{
return;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Ранее он использовал некоторые события win32 для синхронизации доступа между потоками. Но теперь я изменил его, чтобы использовать вместо него std::condition_variable
и std::mutex
. Интересно, были ли эти PostMessage
и PeekMessage
так или иначе связаны с этими событиями? Приложение также имело несколько PumpMessage
(в которых была приведена выше реализация) и StopMessagePump
реализаций, которые я никогда не использовал и больше не нахожу полезными. Предполагается, что приложение запускается в фоновом режиме, то есть оно не владеет и не обрабатывает никаких окон консоли самостоятельно.
Я прочитал документацию по MSDN , и мне трудно понять, как они ссылаются на PostThreadMessage как особый случай.
Однако, в общем, на что способен PostMessage(NULL,WM_CLOSE,0,0)
?