Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Thread-Status-Informationen auslesen (https://www.delphipraxis.net/168741-thread-status-informationen-auslesen.html)

AJ_Oldendorf 7. Jun 2012 22:11

Thread-Status-Informationen auslesen
 
Hallo zusammen,
angenommen ich habe in meiner Anwendung 47 Threads laufen.
Jeder Thread arbeitet eine Nachrichtenwarteschlange ab (PeekMessage...).
Die Nachrichten innerhalb eines Threads können auch unterschied lang sein.

Wie kann ich gewisse Informationen über diese 47 Threads auslesen wie zum Beispiel Nachrichtenanzahl in MessageQueue oder Speicherverbrauch des einzelnen Threads usw. (diese Dinge fallen mir grad ein).

Würde zum Beispiel gerne folgendes wissen:

Thread 1 hat 327 Nachrichten abzuarbeiten und dieser Thread belegt 300k im Speicher.
Thread 2 hat 4711 Nachrichten abzuarbeiten und dieser Thread belegt 800k im Speicher.
Thread 3 hat 12 Nachrichten abzuarbeiten und dieser Thread belegt 32k im Speicher.
usw.

Ich hoffe ihr könnt mir da weiter helfen.
Viele Grüße
Alex

himitsu 7. Jun 2012 22:26

AW: Thread-Status-Informationen auslesen
 
Siehst du da links an der Seite eine hilfreiche Funktion oder bei einem der Funktionen einen passenden Link?

Nee, dann hast'e wohl Pech.



Und was den Speicher angeht.
Der meiste Speicher ist nicht an einen Thread gebunden, also wirst du so oder so selber mitzählen müssen.

Das Einzige, was wirklich mit einem Thread verbunden ist, wäre der Stack, wozu es bestimmt passene APIs gibt, um dessen Größe auslesen liese, aber beim Heap gehört alles zur "Anwendung", womit ausschließlich du weißt, bzw. wissen solltest, was zu einem Thread gehört.

AJ_Oldendorf 7. Jun 2012 22:35

AW: Thread-Status-Informationen auslesen
 
Zitat:

Siehst du da links an der Seite eine hilfreiche Funktion oder bei einem der Funktionen einen passenden Link?
Ich muss gestehen, dass habe ich nicht verstanden :-) Vielleicht schon zu spät :-)

Wenn jemand gewisse API Funktionen kennt, um die Stack Speichergröße auslesen zu kennen, wäre es hilfreich diese hier zu posten.

Danke schonmal und viele Grüße

himitsu 7. Jun 2012 22:43

AW: Thread-Status-Informationen auslesen
 
Zitat:

Zitat von AJ_Oldendorf (Beitrag 1169886)
Wenn jemand gewisse API Funktionen kennt, um die Stack Speichergröße auslesen zu kennen, wäre es hilfreich diese hier zu posten.

Im MSDN siehst du doch links eine Liste mit APIs zum selben Thema?

Tipp: Ich konnte da keine API finden, welche sowas ausließt. :wink:



OK, vielleicht gibt es noch irgendwo eine undokumentierte/geheime/interne API, aber da kommst du besser, wenn du dein Konzept nochmals überarbeitest.
Undokumentiertes kann sich auch schnell mal verändern oder gar verschwinden, so daß man sich nicht unbedingt drauf verlassen sollte.


[edit]
Ups, ich hatte vorhin den Link vergessen. :lol:
MSDN-Library durchsuchenPeekMessage > http://msdn.microsoft.com/en-us/libr.../ms644943.aspx

Und wenn man mehr wissen will, dann einfach weiter oben weitersuchen.
http://msdn.microsoft.com/en-us/libr.../ms632590.aspx
http://msdn.microsoft.com/en-us/libr.../ms632586.aspx
...

AJ_Oldendorf 7. Jun 2012 22:47

AW: Thread-Status-Informationen auslesen
 
Ok, jetzt weiß ich was du meinst :-D
Ich könnte ja rein theoretisch eine while Schleife mit PeekMessage machen aber als Parameter nicht Remove angeben, sondern nur so zum zählen der Nachrichten innerhalb der Queue. Das gefällt mir aber irgendwie nicht. Dachte es gibt vielleicht irgendeine Informationsquelle für einen Thread, die man auslesen kann. Sowas ähnliches wie "GetProcessMemoryInfo" für die Anwendung...

Gruß

himitsu 7. Jun 2012 22:55

AW: Thread-Status-Informationen auslesen
 
Nur daß PeekMessage dann immer wieder nur die oberste Message liefern wird. :wink:
Ich glaub deine Schleife wird dann zur Endlosschleife.

Hatte auch mal versucht zu zählen, aber ebenfalls nix gefunden.
Hat man wohl einfach nicht vorgesehn, daß jemand sowas auslesen wöllte.


Bei Google suchenwindows count of messages in message queue
count/counting/size/number/...

Ob sich so aber was finden läßt... wer weiß ...

Luckie 7. Jun 2012 23:05

AW: Thread-Status-Informationen auslesen
 
Gegenfrage: Wozu benötigst du diese Informationen?

AJ_Oldendorf 7. Jun 2012 23:08

AW: Thread-Status-Informationen auslesen
 
Gegenantwort Luckie: Wäre doch ganz schön zu sehen, bei einer großen Anzahl Threads, wer gerade wie viele Nachrichten abarbeiten muss und wie viel Speicher der jeweilige Thread gerade mit seinen ganzen Nachrichten einnimmt. Nur zur Statistik eben...

Gruß
Alex

Luckie 7. Jun 2012 23:16

AW: Thread-Status-Informationen auslesen
 
OK, ist also für das Programmfunktion nicht zwingend nötig.

Wo kommen die Nachrichten denn her? Eventuell können die Absender mitzählen wie viele Nachrichten sie verschickt haben. Und ich nehme auch mal an, dass du so was wie einen Threadpool hast. Vielleicht könnte man da mitzählen, wie die ankommenden nachrichten auf die Threads verteilt werden. Und den Speicherverbrauch kannman dann durch eine einfache Multiplikation (Anzahl Nachrichten x Speicherverbrauch pro Nachricht) ermitteln.

himitsu 7. Jun 2012 23:48

AW: Thread-Status-Informationen auslesen
 
Aktuell passen so in etwa jeweils 10000 Messages rein und PostMessage teilt dir mit, wenn es voll ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz