Дождаться события с другого потока, не прерывая обработку сообщений?
Многопоточность для меня неизведанная тема, подскажите, как правильно сделать.
Собственно, есть неосновной поток, который исполняет некую полезную работу и может оповестить (как ?) главный поток о каком-то событии.
Как сделать так, чтобы обработка сообщений оконной процедуры не прекращалась, ожидая это событие? (Т.е. цель в том, чтобы главное окошко не «подвисло», не отвечая на запросы пользователя).
Нужно использовать PostMessage? А есть возможность не затрагивать оконную процедуру (т.е. не отсылать сообщения), что-то на подобии WaitForSingleObject?
MsgWaitForMultipleObjects[Ex]
Если используете ATL в проекте, то можно заюзать AtlWaitWithMessageLoop. А если не используете, то посмотрите ее исходник в качестве примера юзания MsgWaitForMultipleObjects.
Можно вообще просто поступить, если есть гарантии, что пишет только 1 поток. Объявить volatile переменную, засунуть туда к примеру false и запустить поток, затем по окончании записать true, да в основном рабочем потоке проверять её изменение. Если гарантии нет, что писать будет 1 поток, можно взять к примеру std::atomic, если старый компилятор, то стырить где-нить реализацию. Опять же можно просто использовать InterlockedIncrement и семейство функций.