我正在尝试为WinRT编译Boost 1.49.0。我把它归结为一个方法:GetSystemInfo(),它在boost :: thread :: hardware_concurrency()中用于获取系统上逻辑处理器的数量。
我还没有在WinRT中找到任何替代品。
我可以使用另一种方法吗?
答案 0 :(得分:10)
您可以调用Windows样式应用程序中允许的Windows API函数GetNativeSystemInfo
。
答案 1 :(得分:3)
似乎没有一种简单的方法可以在WinRT中获取此信息。如果您只想了解处理器体系结构,那么可以使用Windows.System.ProcessorArchitecture
,但这不会告诉您有多少逻辑CPU可用。 Windows.System.Threading
也没有告诉您这些信息。
要获取有关我在MSDN论坛上找到this question的物理CPU的信息,这表明我们可以使用DeviceEnumeration来获取此信息。通过使用GUID_DEVICE_PROCESSOR的GUID({97FADB10-4E33-40AE-359C-8BEF029DBDD0}),您可以枚举所有处理器。
在Javascript中,这应该是这样的 - 对于C ++示例,请参阅MSDN上的Device Enumeration示例:
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论坛上提问。他们通常都很敏感。
答案 2 :(得分:0)
System.Environment.ProcessorCount应该为您提供核心数。