Перемещение и изменение размера окна мешает MsgWaitForMultipleObjects

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

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


person sold    schedule 05.10.2009    source источник


Ответы (2)


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

person Stephen Nutt    schedule 05.10.2009

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

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

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

person Chris Becke    schedule 05.10.2009