【问题标题】:MSAcpi_ThermalZoneTemperature class not showing actual temperatureMSAcpi_ThermalZoneTemperature 类未显示实际温度
【发布时间】:2012-02-24 10:56:52
【问题描述】:

我想实时获取 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 度。问题出在哪里?

【问题讨论】:

  • queryObj["ThermalStamp"] 的值在调用之间会发生变化吗?
  • @FrédéricHamidi--我检查了 ThermalStamp 属性,它在调用中获得 8 个值,但在调用之间永远不会改变......
  • 奇怪。你确定你的计时器在你认为的时候会滴答作响,并且每次滴答都会调用你的代码吗?
  • 输出是开尔文的十分之一,因此您必须将其转换为摄氏度
  • @FrédéricHamidi——是的,我已经检查/调试了该应用程序多次。计时器很好,它每 500 毫秒滴答一次并调用上面的代码,运行良好,但仍然没有更新...

标签: c#


【解决方案1】:

https://web.archive.org/web/20150911113852/http://www.scriptinternals.com/new/us/support/Internal/WMI_MSAcpi_ThermalZoneTemperature.htm 中,我发现CurrentTemperature 返回主板某处某个热区的温度。这意味着它不会返回 CPU 温度。 就像厨房里的温度是30摄氏度但是炉子是200摄氏度左右...... 这种方式无法显示 CPU 的准确温度。要获得 CPU(和每个内核)的准确温度,您需要编写内核驱动程序,这要复杂得多。

总而言之,您的代码应该做的事情,为了测量温度,您需要使用其他方式。

【讨论】:

  • 是的,你是对的。谢谢回复。后来我发现使用微软的 WMI 类无法确定 CPU 温度。
  • @jchoudhury 只是想问一下,你有没有找到一些简单的方法来获得这个温度?
  • 我还没找到。如果您有任何比 WMI 更好的解决方案,请与我分享。谢谢你的提问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2020-06-27
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多