前回説明していなかったところをもう少し。まずはincludeファイル。先頭で、
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#include <winperf.h>
#include <pdh.h>
#include <pdhmsg.h>
とあるが、"stdafx.h"はVisual Studio 2010 expressが勝手に生成するもので、これは放置しておいて良い。これに続くものは、自分で追加する必要がある。で、<stdio.h>はまぁ癖というか習慣で突っ込んでいるが、Debug printなどの際には必ず必要になるから入れておいたほうが無難だ。これに続くものは、全部必要がある。例えばPdhOpenQuery()という関数の使い方はこちらにある通りだが(Photo01)、このページを下のほうにスクロールするとRequirement(要求)として、
- Header FileにPdb.hを追加すること
- ライブラリにPdh.libを追加すること
が求められる。同じようにwinperf.hとかpdbmsg.hも、今回のソースの中で利用している各関数を使う場合に必要になるものである。tchar.hはUNICODEに関連する部分だが、この辺りは次のサンプルに説明を持ちこすることにさせて欲しい(というか、お暇な方は試してみていただきたいが、例えばtcsstr()をstrstr()で置き換えたりとか、あるいは_tprintf()をprintf()で置き換えた、昔のC言語のスタイルのプログラミングだと、Windows上ではまともに動作しない)。
Photo01: 日本語はこちらになるのだが、実はこちらにはPhoto02に示す情報が含まれて居ない。ということで、面倒ではあるが英語版を見るほうが確実である。 |
さてそんなわけでプログラムを入力したら(前回のList 1をまるごとCopyして、Visual Studio express 2010のソース画面にPasteするのが早い)早速ビルド……の前にちょっとやることがある。先にPdhOpenQuery()を使うためには、inlucde以外にライブラリとしてPdh.libの指定が必要な事を書いた。このPdh.libはPdhOpenQuery()のみならずPdhExpandWildCardPath()/PdhExpandWildCardPath()/PdhAddCounter()/PdhGetFormattedCounterValue()といったパフォーマンスカウンタ関連関数全てで必要となる。このため、ビルドの前にこれを指定してやる必要がある。
指定の手順だが、メニュー→プロジェクトからプロジェクトのプロパティを選ぶ(Photo03)。するとこんなダイアログが出てくるわけだが(Photo04)、デバッグ→入力の中の「追加の依存ファイル」はデフォルトだと、
……odbccp32.lib;%(AdditionalDependencies)
となっている(Photo05)。このodbccp32.libと%(AdditionalDependencies)の間に、Pdb.libを追加してやる(Photo06)。これが終わったら"OK"を押して、変更終了である。
あとはビルドを行い(Photo07)、エラーが出なければ完了である。デバッグ→デバッグ開始(Photo08)でもいいし、あるいは直接実行ファイルを起動すれば、こんな具合に毎秒ごとのCPU負荷をコンソールに表示してくれるはずだ。
ということで、CPU取得のメカニズムは一応完成。次は、Arduinoと通信する部分のテストプログラムに取り掛かる。
(続く)