SYSTEM_INFO.dwNumberOfProcessors に注意

コンピュータの物理CPUの数 で、dwNumberOfProcessors が物理コア数だ、と書いたけど、どうやら間違いらしい。現在ではMSDNの記述自体が書き換えられている。

dwNumberOfProcessors

The number of logical processors in the current group. To retrieve this value, use the GetLogicalProcessorInformation function.

Note  For information about the physical processors shared by logical processors, call GetLogicalProcessorInformationEx with theRelationshipType parameter set to RelationProcessorPackage (3).

しかも代替APIの GetLogicalProcessorInformationEx は Minimum supported client が Windows 7 になっている。ということは、XP/Vista では論理コア数を取得する方法はないってこと?? (どうもWMIを使えば取れるらしいけど、普通のアプリケーションでWMIなんか触りたくない…。)

ちゃんと調べてコード書いてるのにふざけんなぁっ。物理コア数に依存して処理切り替えてる部分がバグになっちゃったじゃないか。

あ、GetLogicalProcessorInformation でも取れるっぽい。しかもXP SP3以降でOK。でも使うのがすごく面倒くさい…orz Determining the number of physical CPU's on Windows あたりが参考になりそう。