6 Stimmen

Die Klasse MSAcpi_ThermalZoneTemperature zeigt die tatsächliche Temperatur nicht an

Ich möchte CPU-Leistungsdaten in Echtzeit einschließlich Temperatur abrufen. Ich habe den folgenden Code verwendet, um CPU-Temperatur zu erhalten:

try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\WMI",
                "SELECT * FROM MSAcpi_ThermalZoneTemperature");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                double temp = Convert.ToDouble(queryObj["CurrentTemperature"].ToString());
                double temp_critical = Convert.ToDouble(queryObj["CriticalTripPoint"].ToString());
                double temp_cel = (temp/10 - 273.15);
                double temp_critical_cel = temp_critical / 10 - 273.15;
                lblCurrentTemp.Text = temp_cel.ToString();
                lblCriticalTemp.Text = temp_critical_cel.ToString();
            }
        }
        catch (ManagementException e)
        {
            MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
        }

aber dieser Code zeigt die Temperatur an, die nicht die richtige Temperatur ist. Normalerweise zeigt er 49,5-50,5 Grad Celsius an. Aber ich habe "OpenHardwareMonitor", die CPU-Temperatur über 71 Grad Celsius und wechselnde Fraktionen zusammen mit Zeit Fraktionen Bericht. gibt es etwas, das ich in dem Code fehlt?

Ich habe den obigen Code im timer_click-Ereignis für alle 500ms Intervall verwendet, um die Temperaturanzeige zu aktualisieren, aber es zeigt immer die gleiche Temperatur vom Beginn der Ausführung. Das bedeutet, wenn Sie diese Anwendung ausführen und wenn es 49 Grad zeigt dann nach 1 Stunde Sitzung, es wird ständig zeigen 49 Grad. Wo liegt das Problem?

6voto

ST3 Punkte 8392

Unter https://web.archive.org/web/20150911113852/http://www.scriptinternals.com/new/us/support/Internal/WMI_MSAcpi_ThermalZoneTemperature.htm Ich habe festgestellt, dass CurrentTemperature die Temperatur an einer thermischen Zone zurückgibt, die sich irgendwo auf der Hauptplatine befindet. Das heißt, es gibt nicht die CPU-Temperatur zurück. Es wäre das gleiche wie die Temperatur in der Küche ist 30C aber Herd ist 200C oder so... Auf diese Weise kann die genaue Temperatur der CPU nicht angezeigt werden. Um die genaue Temperatur der CPU (und jedes Kerns) zu erhalten, müssen Sie Kernel-Treiber schreiben, was viel komplizierter ist.

Alles in allem tut Ihr Code das, was er tun sollte, für die Temperaturmessung müssen Sie eine andere Methode verwenden.

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