如何获取 WinRT 上的逻辑 CPU 数量

How can I get the number of logical CPUs on WinRT?

本文关键字:CPU 数量 WinRT 何获取 获取      更新时间:2023-10-16

我正在尝试为 WinRT 编译 Boost 1.49.0。我把它归结为一种方法:GetSystemInfo(),它在boost::thread::hardware_concurrency()中用于获取系统上逻辑处理器的数量。

我还没有在 WinRT 中找到任何替代品。

有没有我可以使用的替代方法?

你可以调用 Windows API 函数 GetNativeSystemInfo ,这在 Metro 风格的应用中是允许的。

似乎没有一种简单的方法可以在 WinRT 中获取此信息。如果您只是想知道处理器架构,那么您可以使用Windows.System.ProcessorArchitecture但这不会告诉您有多少逻辑 CPU 可用。 Windows.System.Threading也没有告诉你这些信息。

为了获取有关物理 CPU 的信息,我在 MSDN 论坛上发现了这个问题,这表明我们可以使用设备枚举来获取此信息。通过使用 GUID for GUID_DEVICE_PROCESSOR ({97FADB10-4E33-40AE-359C-8BEF029DBDD0}),可以枚举所有处理器。

在 Javascript 中,这应该看起来像这样 - 有关C++示例,请参阅 MSDN 上的设备枚举示例:

Windows.Devices.Enumeration.DeviceInformation.findAllAsync('"System.Devices.InterfaceClassGuid:="{97FADB10-4E33-40AE-359C-8BEF029DBDD0}""')
.then(function (info) {
    for (var i = 0; i < info.length; i++) {
        var device = info[i];
    }
});

在我的机器上,这为我提供了各种设备,声卡,PCI和USB处理器,所以我不确定是否有更好的方法来获取CPU,但我确实得到了我拥有的CPU的信息

"Intel(R) Core(TM) i7 CPU       Q 740  @ 1.73GHz"

不幸的是,此信息似乎不包括告诉您 CPU 数量的简单标志,因此我认为很难获得多个逻辑 CPU。我建议您在MSDN论坛上提问。他们通常反应灵敏。

System.Environment.ProcessorCount 应该给你内核数。