MSAcpi_ThermalZoneTemperature类未显示实际温度
本文关键字:温度 显示 ThermalZoneTemperature MSAcpi | 更新日期: 2023-09-27 18:22:04
我想实时获取CPU性能数据,包括温度。我使用以下代码来获取CPU温度:
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);
}
但该代码显示的温度不是正确的温度。气温通常为49.5-50.5摄氏度。但我使用了"OpenHardwareMonitor",它报告CPU温度超过71摄氏度,并随时间分数而变化。代码中有我遗漏的东西吗?
我在timer_click事件中每隔500毫秒使用上述代码来刷新温度读数,但从执行开始,它总是显示相同的温度。这意味着,如果你运行这个应用程序,如果它显示49度,那么在1小时的会话后,它将不断显示49度。问题出在哪里?
Inhttps://web.archive.org/web/20150911113852/http://www.scriptinternals.com/new/us/support/Internal/WMI_MSAcpi_ThermalZoneTemperature.htm我发现CurrentTemperature会返回主板上某个热区的温度。这意味着它返回的不是CPU温度。这与厨房的温度是30摄氏度,但炉子是200摄氏度左右是一样的。。。这种方式无法显示CPU的确切温度。为了获得CPU(和每个内核)的确切温度,你需要编写内核驱动程序,这要复杂得多。
总而言之,你的代码做了它应该做的事情,为了测量温度,你需要使用其他方法。