Syndication
Search


クリエイティブ・コモンズ・ライセンス
Movable Type 2.661

Longhorn β延期

β版の延期ですか…。はやくまともに動くLonghornの登場を希望します。

- マイクロソフト、Longhornベータ版の年内出荷断念か - CNET Japan -
ワシントン州レッドモンド発--Microsoftのトップ幹部はCNET News.comに対し、Longhornのベータ版配布は来年に延期される可能性が高いと語った。同社がWindows XPのセキュリティ強化に追われていることに起因するという。

手元にあるPDC版では、Longhornの魅力ある(そして難解な)動作を、ほとんど確認することが出来ないんですよ。「Win16->Win32以来の革新だ」とかいう話をどこかで読みましたが、開発者にとっては(私だけかもしれませんが)、比べ物にならないほど面倒で難解そうです。予習として各所に散らばっているLonghornに関係ありそうな資料を読むだけでも骨が折れるのに、まともに動く物がまだ無いんですからね…。「Win16->Win32」の時はドキドキしたのに…(--;

パフォーマンスの取得

システムモニタや、タスクマネージャの「プロセス」タブ等で、表示される「CPU使用率」とか「メモリ使用量」とかを所得する方法のメモ。
PDH系APIを使用します。ただし、これはNT系のみでの動作。たしか95系はレジストリに値が記録されていたと記憶…。たしか、昔MSDNLibraryかなにかでPDHの記事があったような記憶あるけど、忘れてしまったのでサンプル作って動作確認。で、何に使うかは不明(^_^;

#include    <windows.h>
#include    <stdio.h>
#include    <pdh.h>

void main()
{
HQUERY hQuery;
HCOUNTER hCounter;
PDH_COUNTER_PATH_ELEMENTS cpe;
char path[256];
DWORD size = 256;
PDH_FMT_COUNTERVALUE FmtValue;

//クエリー作成
PdhOpenQuery(NULL, 0, &hQuery);

//所得したい情報(カウンタ)のパスを作成
//例として、メモ帳のCPU使用率
//ObjectNameやCounterNameで指定する名称は、
//PdhEnumObjects()でオブジェクトの列挙
//PdhEnumObjectItems()でカウンタの列挙が出来る
//決めうちなら、システムモニタの「カウンタの追加」を参照
cpe.szMachineName = NULL;
cpe.szObjectName = "Process";
cpe.szInstanceName = "notepad";
cpe.szParentInstance = NULL;
cpe.dwInstanceIndex = 0;
cpe.szCounterName = "% Processor Time";
PdhMakeCounterPath(&cpe, path, &size, 0);

//カウンタをクエリーに追加
PdhAddCounter(hQuery, path, 0, &hCounter);

#if 1
//値取得
PdhCollectQueryData(hQuery);
//10秒間待つ
Sleep(10000);
//値取得
PdhCollectQueryData(hQuery);
#else
//こちらでもよいが、NT4では動かない
PdhCollectQueryDataEx(hQuery, 10, NULL);
#endif

//10秒間のメモ帳のCPUの使用率を取得
PdhGetFormattedCounterValue(hCounter, PDH_FMT_DOUBLE, NULL, &FmtValue);
printf("メモ帳のCPU使用率: %f%%\n", FmtValue.doubleValue);

//終了
PdhCloseQuery(hQuery);
}


追記:.NETでのパフォーマンスカウンタ fromMSDN
こちらはちゃんと日本訳されてます。Longhornを見据えて、そろそろクライアントアプリも.NETで開発してよいのかも。ただ現状では、.NET Frameworkが別配布&重いのが難点だけど…。