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

8

Unsere Anwendung erhält einen Systemaufruf fehlgeschlagener RPC-Fehler von DCOM ( 0x80010100 ). Wir vermuten, dass die Nachrichtenwarteschlange des Ziel-Threads voll ist (obwohl ich nicht davon überzeugt bin, dass dies der Fall ist). Ich weiß, die Warteschlange ist begrenzt auf 10,000 messages und ich möchte um zu sehen, ob wir in den häufigen Fällen dieser Zahl nahe sind. 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 enthält nicht die Anzahl der Nachrichten in der Warteschlange nur ihre Typen.

    
Motti 02.11.2008, 10:15
quelle

1 Antwort

5

Ich kenne keine Möglichkeit, die Größe der Warteschlange zu überwachen (kurz, einen Kernel-Debugger zu verwenden und in der internen Win32Thread-Datenstruktur bei TIB + [0x40] zu kriechen, was ich kaum empfehle).

Versuchen Sie zu Debuggingzwecken, eine PostThreadMessage durchzuführen, um zu überprüfen, ob die Warteschlange voll ist, wenn Sie den Fehler erhalten. Wenn es voll ist, sollte der Aufruf mit GetLastError () == 0x718 fehlschlagen. (Es ist nicht genug Kontingent verfügbar, um diesen Befehl zu verarbeiten.)

    
Tadmas 12.02.2009, 08:07
quelle