У меня проблема в крупномасштабном приложении, которое, похоже, связано с обменом сообщениями Windows на Pocket PC. У меня есть приложение PocketPC, написанное на c ++. У него только один стандартный цикл сообщений.
while (GetMessage (& msg, NULL, 0, 0))
{
{TranslateMessage (& msg);
DispatchMessage (& msg);
}
}
У нас также есть стандартные dlgProc. В переключателе dlgProc мы будем вызывать проприетарный сторонний API. Этот API использует соединение с сокетом для связи с другим процессом. Проблема, которую я вижу, заключается в следующем: всякий раз, когда два одинаковых сообщения приходят быстро (от пользователя, дважды щелкающего по экрану слишком быстро и не должно быть), создается впечатление, что создается рекурсия. Windows начинает обрабатывать первое сообщение, переводит API в потокобезопасное состояние, а затем переходит к обработке следующего (идентичного интерфейса) сообщения. Хорошо, так как второе сообщение также делает вызов API, вызов не выполняется, потому что он заблокирован. Из-за конструкции этой унаследованной системы API будет заблокирован до тех пор, пока не вернется рекурсия (которая также запускается пользователем; поэтому он может быть заблокирован на весь рабочий день). Я изо всех сил пытаюсь выяснить, почему именно это происходит, и что я могу с этим поделать. Это из-за того, что Windows распознает, что соединение через сокет займет время, и выгрузит его? Есть ли способ заставить этот вызов API завершить перед вытеснением? Есть ли способ, которым я могу замедлить обработку сообщения или переместить в очередь сообщение, чтобы убедиться, что первое выполнится (захват его и выполнение PostMessage обратно к себе не сработало). Мы не хотим блокировать пользовательский интерфейс во время первого вызова.
Любое понимание очень ценится! Спасибо !!