Могу ли я контролировать размер очереди сообщений потока?
-
05-07-2019 - |
Вопрос
Наше приложение получает ошибку RPC System Call Failed от DCOM ( 0x80010100
), мы подозреваем, что очередь сообщений целевого потока заполнена (хотя я не уверен, что это так). Я знаю, что очередь ограничена 10000
сообщениями и я хочу посмотреть, близки ли мы к этому числу в общих случаях. Есть ли способ контролировать размер очереди сообщений потока?
Самым многообещающим вариантом, который я нашел, был GetQueueStatus
, но не включает в себя количество сообщений в очереди, а только их типы.
Решение
Я не знаю ни одного способа контроля размера очереди (если не использовать отладчик ядра и унижение внутренней структуры данных Win32Thread в TIB + [0x40], которую я вряд ли рекомендую).
В целях отладки, чтобы проверить, заполнена ли очередь при появлении ошибки, попробуйте выполнить PostThreadMessage. Если он полон, вызов должен завершиться неудачно с GetLastError () == 0x718. (Недостаточно квоты для обработки этой команды.)