4 つの物理プロセッサ ソケットを備えたシステムがあります。Windows 2003 を実行していて、C++ を使用してプログラムでソケットの数を見つけたいと考えています。これは可能ですか?
質問する
7560 次
2 に答える
2
Windows 7 および 2008 サーバーには、GetActiveProcessorGroupCount 関数があります。しかし、あなたは 2003 サーバーを持っているので、それはオプションではありません。
C++ では、これには WMI コンシューマ コードを記述する必要があり、これは不器用で退屈な (D)COM のものです。
良い解決策の 1 つはsysteminfo
、コマンドを実行して出力を解析することですが、出力の列ヘッダーはシステムのロケールに合わせてローカライズされるので注意してください。
編集
WMI へのコマンドライン インターフェイスを利用する、はるかに優れたソリューションを見つけました。
次のコマンドを実行して出力を解析します。ソケットごとに 1 行あります。
> wmic.exe cpu get
AddressWidth Architecture Availability Caption ConfigManagerErrorCode ConfigManagerUserConfig CpuStatus CreationClassName CurrentClockSpeed CurrentVoltage DataWidth Description DeviceID ErrorCleared ErrorDescription ExtClock Family InstallDate L2CacheSize L2CacheSpeed L3CacheSize L3CacheSpeed LastErrorCode Level LoadPercentage Manufacturer MaxClockSpeed Name NumberOfCores NumberOfLogicalProcessors OtherFamilyDescription PNPDeviceID PowerManagementCapabilities PowerManagementSupported ProcessorId ProcessorType Revision Role SocketDesignation Status StatusInfo Stepping SystemCreationClassName SystemName UniqueId UpgradeMethod Version VoltageCaps
64 9 3 Intel64 Family 6 Model 23 Stepping 6 1 Win32_Processor 2532 33 64 Intel64 Family 6 Model 23 Stepping 6 CPU0 421 2 0 0 6 1 GenuineIntel 2532 Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz 2 2 FALSE BFEBFBFF00010676 3 5894 CPU CPU Socket #0 OK 3 Win32_ComputerSystem CHBROSSO-WIN7VM 1 2
exe を実行し、C++ で出力を解析するのは簡単な部分です。POCO ライブラリまたは Boost.Process を使用して、よりクリーンなコードを作成することもできます。
(これはテストされていないコードです)
//get wmic program output
FILE* pipe = _popen("wmic.exe cpu get", "r");
if (!pipe) throw std::exception("error");
char buffer[128];
std::string output;
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
output += buffer;
}
_pclose(pipe);
//split lines to a vector<string>
std::stringstream oss(output);
std::vector<std::string> processor_description; std::string buffer;
while (std::getline(oss, buffer))
processor_description.push_back(buffer);
//processor_description has n+1 elements, n being nb of sockets, +1 is the header of columns
于 2012-06-18T14:18:25.610 に答える