Wie man die CPU-Nutzung pro Thread auf Windows (Win32) erhalten
Suche nach Win32-API-Funktionen, C++ - oder Delphi-Beispielcode, der sagt mir, die CPU-Auslastung (in Prozent und/oder die Gesamt-CPU-Zeit) ein Gewinde (nicht die Summe für einen Prozess). Ich habe die thread-ID.
Ich weiß, dass Sysinternals Process Explorer kann diese Informationen anzeigen, aber ich brauche diese Informationen in mein Programm.
InformationsquelleAutor der Frage Dirk Paessler | 2009-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie diese Funktionen verwenden, um die cpu-Auslastung pro thread und Prozess.
GetThreadTimes (Ruft timing-Informationen für den angegebenen thread.)
GetProcessTimes (Ruft timing-Informationen für den angegebenen Prozess.)
GetSystemTime (Ruft das aktuelle Datum und die Uhrzeit. Das system mit der Zeit, ausgedrückt in Coordinated Universal Time, UTC)
Hier einen ausgezeichneten Artikel von Dr. Dobb ' s Win32-Performance-Messung-Optionen
Bye.
InformationsquelleAutor der Antwort RRUZ
Die Daten, die Sie sich beziehen ist verfügbar mit bestimmten WMI Anrufe. Sie können die Abfrage "Win32_Process", um alle Arten von Prozess-spezifische Informationen und Abfrage Win32_PerfFormattedData_PerfProc_process um die Anzahl der Threads, und da ein handle für einen thread (was ich glaube, was Ihr sucht) Sie können die Abfrage Win32_PerfRawData_PerfProc_Threadum die Prozent der Prozessor-Zeit verwendet.
Es ist ein Bibliothek für Delphi die wrappers für die meisten WMI-Abfragen, aber es dauert einige Experimente, um die genaue Abfrage Ihrer Suche nach. Die Abfrage-syntax ist sql sehr gerne, zum Beispiel auf meinem system zurückgeben Prozent der Prozessor-Zeit für die threadid 8, für die Prozess-id 4:
Meisten der Programme, die die statistischen Informationen über laufende Prozesse nun mit WMI Abfrage für diese Informationen.
InformationsquelleAutor der Antwort skamradt
Ist wichtig zu wissen, dass in bestimmten Situationen, die Ausführungszeit eines Threads kann wertlos werden.
Die Ausführungszeiten der einzelnen thread-aktualisiert alle 15 Millisekunden in der Regel für multi-core-Systeme, so dass, wenn ein thread seine Aufgabe beendet hat, bevor dieser Zeit, wird die Laufzeit zurückgesetzt werden.
Weitere details erhalten Sie auf den folgenden link:
GetThreadTimes-Funktion und ich war von dem Ergebnis überrascht!
und
Warum GetThreadTimes falsch ist
InformationsquelleAutor der Antwort lsalamon
Mit Hilfe von RRUZ die Antwort von oben kam ich dann schließlich mit diesem code für Borland Delphi:
InformationsquelleAutor der Antwort Dirk Paessler
Mit "GetThreadTimes"? Wenn Sie die Zeit Messen, die zwischen den aufrufen von "GetThreadTimes" und speichern Sie den vorherigen Benutzer und/oder kernel-Zeiten, dann wissen Sie, wie viel Zeit der thread hat seit Sie zuletzt überprüft. Sie wissen auch, wie viel Zeit verstrichen in der Zwischenzeit, und damit können Sie herausfinden, wie viel CPU-Zeit verwendet wurde. Am besten wäre es (für die timer-Auflösung von Gründen) auf diese Prüfung jede Sekunde oder so, und arbeiten Sie out die Durchschnittliche CPU-Auslastung über die zweite.
InformationsquelleAutor der Antwort Goz
Hier ist eine einfache WMI-Abfrage wrapper. Mit Hilfe von es können Sie aufrufen, diese Daten zu erhalten:
Auch möchten Sie vielleicht, um Blick auf die Win32_PerfRawData_PerfProc_Thread Dokumentation, um zu sehen, welche anderen Eigenschaften, die Sie abholen können.
InformationsquelleAutor der Antwort Just Shadow