У меня есть поток, который вызывает ::PostMessage(hWnd, [...]);
, чтобы отправить сообщение в основной поток, предупреждая его о результатах операции async.:: PostMessage to invalid hWnd
Тем не менее, я обеспокоен тем, что если нить занимает особенно много времени, чтобы завершить свою работу, hWnd
может не существовать при вызове PostMessage
(пользователь может закрыть окно).
MSDN Documentation ничего не сообщил о результатах, если hWnd
недействителен.
Знаете ли вы, на основе опыта или другой документации, что я могу ожидать, если hWnd
недействителен?
Возможно, вам нужно скрыть окно, а не уничтожить его, пока поток не будет выполнен с его помощью. –
@Ben Voigt: Я согласен, но я работаю в большом корпусе и не контролирую этот выбор архитектуры. – abelenky
В настройке с большим корпусом вы можете указать ошибку. См. Мой ответ ... Знаменитый Раймонд Чен сказал, что это ошибка. Другой альтернативой является использование 'weak_ptr' и аннулирование его, когда окно будет уничтожено ... хотя это оставляет вас с условием гонки, интервал между извлечением HWND из слабого указателя и фактическим вызовом' PostMessage'. Так что, действительно, вам нужно сохранить окно живым. –