Frage

Ich habe zwei Systemaufrufe GetSystemTime () und GetThreadTimes (), die ich brauche die CPU-Auslastung durch einen gegebenen Win32 Thread zu berechnen.

Aus Gründen der Genauigkeit, muss ich sicherstellen, dass beide GetSystemTime () und GetThreadTimes () atomar ausgeführt; das heißt, es sollte zwischen einem Aufruf GetSystemTime () & GetThreadTimes ().

kein Kontextwechsel sein

Der Grund dafür ist, dass gelegentlich I mit einem Anteil von mehr als 100% (~ 1: 500) enden.

Wie kann ich eine atomare Ausführung der 2-Funktionsaufrufe gewährleisten?

Danke, Sachin

War es hilfreich?

Lösung

Ihre beste Wette wäre Computing Thread eine Echtzeit-Priorität werden zuweisen. Echtzeit-Threads nur von anderen Echtzeit-Threads preempted bekommen (oder diejenigen zu Echtzeit-Priorität erhöht).

Andere Tipps

Ich bin mir nicht so sicher, Sie können. Es sei denn, Sie wissen, was sind die zugrunde liegenden Vorgänge in jeder Funktion, und da sie passieren Windows-API-Aufrufe ... viel Glück sein.

Wäre es nicht möglich sein, nur für Prozentsatz über 100 einstellen?

perc = ( perc > 100.0f ) ? 100.0f : perc;

Leider gibt es keine Möglichkeit. Zwischen zwei Systemaufrufen in Win32 gibt es keine Möglichkeit Ihren Prozess / Thread, um zu verhindern Zusammenhang ist abgeschaltet. Sonst wäre es trivial sein für jemanden, einen Prozess zu implementieren, die das System gesperrt durch zu jeder Verweigerung bekommen abgeschaltet.

würde die Funktionen in umgekehrter Reihenfolge Hilfe zu rufen? (99% besser ist als 101% ...)

Auch wenn Sie einen Kontextwechsel zwingen, nur dies, bevor Sie (zum Beispiel durch Schlaf () aufgerufen wird), werden Sie wahrscheinlich die Chancen verringern, immer abgeschaltet. Ich weiß nicht, wie gut, dass, obwohl funktionieren würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top