4

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

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

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

4

3 回答 3

11

GetNativeSystemInfo您可以调用Metro 风格应用程序中允许的 Windows API 函数。

于 2012-04-12T23:04:22.600 回答
3

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

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

在 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 论坛上提问。他们通常反应灵敏。

于 2012-04-11T23:47:28.210 回答
0

System.Environment.ProcessorCount 应该给你核心的数量。

于 2013-01-24T19:40:46.277 回答