8 Stimmen

Kann ich die Größe der Nachrichtenwarteschlange eines Threads überwachen?

Unsere Anwendung erhält einen System Call Failed RPC-Fehler von DCOM ( 0x80010100 ), vermuten wir, dass die Nachrichtenwarteschlange des Zielthreads voll ist (obwohl ich nicht überzeugt bin, dass das stimmt). Ich weiß, die Warteschlange ist beschränkt auf 10,000 Nachrichten und ich möchte sehen, ob wir in den üblichen Fällen in der Nähe dieser Zahl liegen. Gibt es eine Möglichkeit, die Größe der Nachrichtenwarteschlange eines Threads zu überwachen?

Die vielversprechendste Option, die ich gefunden habe, war GetQueueStatus aber dies beinhaltet nicht die Anzahl der Nachrichten in der Warteschlange, sondern nur deren Typen.

5voto

Tadmas Punkte 6030

Ich kenne keine Möglichkeit, die Größe der Warteschlange zu überwachen (es sei denn, man verwendet einen Kernel-Debugger und wühlt in der internen Win32Thread-Datenstruktur bei TIB+[0x40], was ich nicht empfehlen kann).

Um zu überprüfen, ob die Warteschlange voll ist, wenn der Fehler auftritt, können Sie eine PostThreadMessage ausführen. Wenn sie voll ist, sollte der Aufruf mit GetLastError() == 0x718 fehlschlagen. (Es ist nicht genügend Quote verfügbar, um diesen Befehl zu verarbeiten).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X