Перемещение и изменение размера окна мешает MsgWaitForMultipleObjects
У меня есть приложение, которое зацикливает сообщения, используя MsgWaitForMultipleObjects для перехвата дополнительных событий при прокачке пользовательских сообщений. Кажется, что как только окно перемещается или изменяется, DefWindowProc начинает свой собственный цикл сообщений, пока не будет отпущена мышь. Эта ситуация не позволяет внешнему циклу перехватывать дополнительные сообщения.
Я бы не хотел многопоточность приложения только из-за этого. Есть ли другой способ решить это?
2 ответа
MsgWaitForMultipleObjects имеет очень мало применений в традиционной многопоточной программе. Это имеет некоторое применение в играх - где традиционные не-клиентские элементы фрейма опущены, а API, такие как "MessageBox" и "DoDragDrop", исключены...
Обычно он находит лучшее применение в потоках "UI worker", которые не размещают видимые окна, но используют очередь сообщений в качестве системы обмена сообщениями между потоками, а также должны ожидать дескрипторы ядра.
В вашем случае создание второго потока не представляется возможным. По иронии судьбы, PostThreadMessage + MsgWaitForMultipleObjects, вероятно, будет самым простым способом установить надежный механизм связи между потоком GUI и вашим рабочим потоком "пользовательского интерфейса".
Есть несколько дополнительных мест в Windows API, которые будут вводить свой собственный цикл сообщений. Если вам нужно продолжать обрабатывать ваши сообщения в это время, вам понадобится отдельная ветка.