2012-04-11 5 views
4

私はWinRT用のBoost 1.49.0をコンパイルしようとしています。私は1つのメソッドGetSystemInfo()を使って、boost :: thread :: hardware_concurrency()でシステム上の論理プロセッサの数を取得するのに使用します。WinRT上の論理CPUの数はどのように取得できますか?

WinRTでの置換はまだ見つかりませんでした。

私は使用できる代替方法がありますか?

+1

Visual C++ 11では、C++ 11スレッドとアトミックライブラリがサポートされています。 Boost.Threadの代わりにその使用を検討するかもしれません。ライブラリは非常に似ています。 –

+0

ありがとう!これは、TBB、Poco、またはBoost.Threadsのいずれかを使用できる既存のクロスプラットフォームプロジェクトをコンパイルするためのものです。 Boost.Threadsは簡単に移植可能な唯一のものでした(これは私がまだWinRTを見つけられなかった唯一の最終的な方法です)。 – Cygon

答えて

10

Metroスタイルのアプリケーションで許可されているWindows API関数GetNativeSystemInfoを呼び出すことができます。

+0

それは本当ですが、主はそれを発見できません。 –

+0

うわー、私は分かりませんでした。どうやってこれを見つけましたか? –

+4

@PatrickKlug:私はこのAPI関数に精通していて、それは幸運な推測でした:-)。理論的には、Metroスタイルのアプリケーションからアクセス可能なすべてのWindows API関数は、[Windows Dev Centerのこのセクション](http://msdn.microsoft.com/en-us/library/windows/apps/br205757)にリストされています。この特定の機能は実際にリストされています(「システム」の下に)。リストがどれくらい完全であるかわかりません。しかし、WinAPIにはまだ使えるものがたくさんあります。また、CおよびC++標準ライブラリコンポーネント全体を使用することもできます。これも非常に便利です。 –

3

WinRTでこの情報を取得する簡単な方法はないようです。プロセッサアーキテクチャを知りたいだけなら、Windows.System.ProcessorArchitectureを使うことができますが、利用可能な論理CPUの数はわかりません。 Windows.System.Threadingはこの情報もあなたに通知しません。

実際のCPUに関する情報を入手するには、DeviceEnumerationを使用してこの情報にアクセスできることを示すMSDNフォーラムのthis questionが見つかりました。 GUID_DEVICE_PROCESSOR({97FADB10-4E33-40AE-359C-8BEF029DBDD0})のGUIDを使用すると、すべてのプロセッサで列挙できます。 JavaScriptで

これは次のようになります - C++たとえば、MSDNのDevice Enumeration例を参照してください。これは非常に私のデバイスのすべての種類、サウンドカード、PCIおよびUSBプロセッサーを与え、私のマシンで

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]; 
    } 
}); 

を私はちょうどCPUを取得するためのより良い方法があるかどうかわからないが、私は、私は

"Intel(R) Core(TM) i7 CPU  Q 740 @ 1.73GHz" 

を持っているものCPUの情報を手に入れた残念ながら、この情報はあなたの番号を伝えるシンプルなフラグを含めるようには見えません私はそれが難しいと思ういくつかの論理CPUにアクセスします。私はMSDNフォーラムで尋ねることをお勧めします。彼らは通常、非常に反応があります。

+0

私はこの質問を誰かがプロセッサ情報に到達する方法を検索する際につまずいた場合に備えてこの回答を残します。 –

+1

私はちょうどこれをC#で動作させ、それが返す結果は論理的なコアの1つの結果です。例えば。私のCore i7 950は、それぞれが同じ名前の8つの結果を返します。 guidを使用する上記の例では、info.lengthはコアの数になります。 – Adrian

0

System.Environment.ProcessorCountは、コアの数を示す必要があります。

関連する問題