// Получение и обработка заданий, приходящих в поток.
QMSG Message = {0};

while (WinGetMsg (Thread, &Message, 0, 0, 0))
{
  // Проверяем, не идёт ли вслед за выбранным заданием ещё одно такое же задание.
  QMSG Next_message = {0};
  WinPeekMsg (Thread, &Next_message, NULLHANDLE, Message.msg, Message.msg, PM_NOREMOVE);

  if (Next_message.msg == Message.msg)
    if (Next_message.mp1 == Message.mp1)
      if (Next_message.mp2 == Message.mp2)
        if (Next_message.hwnd == Message.hwnd) continue;

  // Выполняем действие.
  ...
}