我正在尝试为 WinRT 编译 Boost 1.49.0。我把它归结为一种方法:GetSystemInfo(),它在 boost::thread::hardware_concurrency() 中用于获取系统上逻辑处理器的数量。
我还没有在 WinRT 中找到任何替代品。
有没有我可以使用的替代方法?
我正在尝试为 WinRT 编译 Boost 1.49.0。我把它归结为一种方法:GetSystemInfo(),它在 boost::thread::hardware_concurrency() 中用于获取系统上逻辑处理器的数量。
我还没有在 WinRT 中找到任何替代品。
有没有我可以使用的替代方法?
GetNativeSystemInfo
您可以调用Metro 风格应用程序中允许的 Windows API 函数。
似乎没有一种简单的方法可以在 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 论坛上提问。他们通常反应灵敏。
System.Environment.ProcessorCount 应该给你核心的数量。