Я полагаю, что вы можете продолжать обрабатывать ваше сообщение WM_ CLOSE в wndproc, и когда вы его получите, вы вызываете PostQuitMessage () , который, в свою очередь, сгенерирует сообщение WM_ QUIT, которое, в свою очередь, будет прочитано GetMessage () / PeekMessage () . * +1007 *
Если ваша оконная нить полностью заблокирована, вам не повезло. У вас есть несколько вариантов. Поток должен иметь возможность периодически выполнять PeekMessage (), находясь в «режиме обработчика сценариев».
while (IsScripting()) {
ScriptEngineTimeSlice();
while (PeekMessage( .. )) {
TranslateMessage( .. );
DispatchMessage( .. ); // <-- wnd procedure will be called
// ..
}
}
Это, вероятно, старые новости для вас, так как вы уже знаете об этом. Но если вы как-то не можете прервать поток пользовательского интерфейса, то нет способа решить эту проблему. Если поток заблокирован, он заблокирован.