Перемещение и изменение размера окна мешает MsgWaitForMultipleObjects - PullRequest
1 голос
/ 05 октября 2009

У меня есть приложение, которое зацикливает сообщения, используя MsgWaitForMultipleObjects для перехвата дополнительных событий при прокачке пользовательских сообщений. Кажется, что как только окно перемещается или изменяется, DefWindowProc начинает свой собственный цикл сообщений, пока не будет отпущена мышь. Эта ситуация не позволяет внешнему циклу перехватывать дополнительные сообщения.

Я бы не хотел многопоточность приложения только из-за этого. Есть ли другой способ решить это?

Ответы [ 2 ]

0 голосов
/ 05 октября 2009

MsgWaitForMultipleObjects имеет очень мало применений в традиционной многопоточной программе. Он имеет некоторое применение в играх - там, где традиционные не-клиентские элементы фреймов опущены, а API, такие как «MessageBox» и «DoDragDrop», не используются ...

Обычно он находит лучшее применение в потоках "UI worker", которые не размещают видимые окна, но используют очередь сообщений в качестве системы обмена сообщениями между потоками и также должны ждать на дескрипторах ядра.

В вашем случае создание второго потока не представляется возможным. По иронии судьбы, PostThreadMessage + MsgWaitForMultipleObjects, вероятно, будет самым простым способом установить надежный механизм связи между потоком GUI и вашим рабочим потоком «пользовательского интерфейса».

0 голосов
/ 05 октября 2009

В Windows API есть несколько дополнительных мест, которые будут вводить свой собственный цикл сообщений. Если вам нужно продолжать обрабатывать ваши сообщения в это время, вам понадобится отдельная тема.

...