PdhExpandWildCardPath

解決


さいとう  2010-07-19 21:29:54  No: 38816

いつもお世話になっています。
PdhExpandWildCardPathの使い方か、
サンプルをご存じの方よろしくお願いします。


Mr.XRAY  URL  2010-07-20 09:34:12  No: 38817

こんにちは.この関数をどんな目的でどのDelphiのバージョンで,どのOSで使用するかは
分かりませんが,ネットで検索すると,JEDI API Libraryを使用したサンプルがあります.
これでは問題があるということでしょうか.

このサイトにも前にスレッドがあったようです.

https://www.petitmonte.com/bbs/answers?question_id=6675
https://www.petitmonte.com/bbs/answers?question_id=6653

マイクロソフト・オンライン...
http://msdn.microsoft.com/en-us/library/aa372606%28VS.85%29.aspx


さいとう  2010-07-20 16:26:24  No: 38818

Mr.XRAYさんありがとうございます。
JEDI API Libraryを使用しましたが、たしかに
サンプルも検索し試しましたが、WinXpではOK
なのですが、Win7ではエラーでした。
WinXp  Delphi7で作成  WinXp  OK  Win7  エラー
Win7  Delphi2010で作成  WIN7  エラ−
  JEDI API LibraryがWin7ぬい対応できていないと
言う事でしょうか?  APIはVer2.3です。
よろしくお願いします。


Mr.XRAY  2010-07-20 20:00:09  No: 38819

http://msdn.microsoft.com/en-us/library/aa372606%28VS.85%29.aspx

の記事に

Prior to Windows Vista:  Partial wildcard matches are not supprted.

とありますから,これが原因ではないのですか.
ともかく,

>サンプルをご存じの方よろしくお願いします。

というご要望にはお答えしたことになりますね(笑).
参考までに,
http://ht-deko.minim.ne.jp/tech045.html#tech095


さいとう  2010-07-21 08:01:57  No: 38820

Mr.XRAYさんへありがとうございます。
初心者なものですみませんでした。
今後もよろしくお願いします。


Mr.XRAY  2010-07-23 03:52:21  No: 38821

こんにちは.その後どうですか.

参考までに,と書いた記事は読んでいただけたのてしょうか?
でしたら,

>サンプルも検索し試しましたが、WinXpではOK

とありますが,どんなサンプルでどんなコードでどんなエラーが現れるのか
分からないと検討のしようもないと思いますが...   いかがでしょうか.


さいとう  2010-07-26 08:07:43  No: 38822

Mr.XRAYさんへ水曜日から仕事の都合でチェックできなったため
返事が遅れすみませんでした。

参考の記事は読ませていただきました。
また、発生するエラーは初期化に失敗しましたとのメッセージ
(実行時)です。
参考にしたコードは、下のコードです。
http://w-shadow.com/blog/2009/04/17/per-core-cpu-usage/
また、MSDNのページも参照しましたが、多分7でも同じとの感触
ですが、それ以上は不明でした。
現在探している途中ですが、上記のページのコードを
windows7で動作させるにはとの点で検討中です。
PdhExpandWildCardPathを使わず、WMI等でCORE数を取得しておいて
その分のcounterを用意して取得するとかでしょうか?
よい方法があればよろしくお願いします。


Mr.XRAY  2010-07-26 09:39:33  No: 38823

参考にした記事とコードはここのですよね.

http://w-shadow.com/blog/2009/04/17/per-core-cpu-usage/

>また、発生するエラーは初期化に失敗しましたとのメッセージ

上のURLのコードですと,この最初のQuery生成でも発生します.
if  PdhOpenQuery(nil, 0, Query) = ERROR_SUCCESS then begin

できれば,数箇所にこのような,エラーが発生しなければ次に進むようになっている
ところがあります.
そのどこで発生するか調べていただくと,貴重な情報になります.
調べ方は,then begin  のすぐ下の行に,  ShowMessage('HogeHoge');
とでも入れてみてください.

これも確認ですが,開発実行環境は,
Win7 + Delphi2010  と
JEDI API Libraryはどこのでしょうか,当方の手元には以下のものがあります.

http://sourceforge.net/projects/jedi-apilib/files/win32api%20%28Win32%20API%29/

のwin32api (Win32 API)の 1.2の win32api_1_2.zip

多分ここのも同じものがおいてあると思いますが.
http://jedi-apilib.sourceforge.net/


Mr.XRAY  2010-07-26 18:19:08  No: 38824

>APIはVer2.3です。

ということなので,これですね.2009-09-22になっているからUnicoce対応なのかな.

JEDI API 2.3 and JEDI WSCL 0.9.3.zip
http://sourceforge.net/projects/jedi-apilib/files/


Mr.XRAY  2010-07-28 08:30:44  No: 38825

こんにちは,
サンプルをUPしました.参考にしてください.

http://mrxray.on.coocan.jp/Delphi/plSamples/475_CpuUsageRate.htm

本当は,質問された方のチェックを待って,それをチェックしてからと思いましたが,
そのために,この掲示板をちょくちょく覗きに(漢字が違うかな)くるのも面倒なので.


Mr.XRAY  2010-07-28 08:42:49  No: 38826

それと,WMIでもWin32_ProcessorでCPUの使用率を取得できますが,
これはコアごとは無理なようです. たとえは

http://mrxray.on.coocan.jp/Delphi/plSamples/475_CpuUsageRate.htm#03

のページの図8,9ではコア数8ですが,WMIでは2としか認識してくれません.
また,WMIのWin32_Procesorでは,CPUの使用率に結構時間かかるようです.
他のクエリーが使えるかどうかは分かりません.


さいとう  2010-07-29 06:27:59  No: 38827

Mr.XRAYさんサンプルまでありがとうございました。
非常に参考になりました。
確かに、WMIで試すと正しいコア数を取得できませんでした。
また結構時間がかかるのも確かです。
CPUのコア数の取得ですが、CPUによってはPDH.DLLを使用しても
正しく取得できない事があるようです。
試した中では、NECのpentium dual-core搭載PCでは、コア数が
1と表示されたのを確認しました。すべてかどうかはわかりません
が、引続き調べたいと思います。
PDH.DLLは有用な情報が多い割にはWebの情報が少ないです。
以前、PDHでDISKアクセスのランプをシュミレートするソフトを
作成した事があります。
またないにかありましたらよろしくお願いします。


Mr.XRAY  2010-08-04 02:25:52  No: 38828

こんにちは.パフォーマンスカウンタの中に該当関数を見つけました.
サンプルです.ただし,クエリー実行中はアプリケーションに対する操作が
できませんので,ちょっとギクシャクするようです.
何か方法があるのかも知れません.

07_WMIを利用したCPU使用率の取得 
http://mrxray.on.coocan.jp/Delphi/plSamples/475_CpuUsageRate.htm#07

>試した中では、NECのpentium dual-core搭載PCでは、コア数が

(*)の部分を(*\*)または(*/*)としたらどうなるでしょう?


Mr.XRAY  2010-08-04 02:30:21  No: 38829

>こんにちは.パフォーマンスカウンタの中に該当関数を見つけました.

失礼!!
WMIのパフォーマンスカウンタ関係の関数のことです.


さいとう  2010-08-04 07:46:10  No: 38830

Mr.XRAYさんいつもありがとうございます。
またNECのpentium dual-coreのマシンで試して
報告させていただきます。
また、WMIの情報もありがとうございました。


さいとう  2010-08-05 02:38:18  No: 38831

Mr.XRAYさんへご報告です。
>(*)の部分を(*\*)または(*/*)に変えて試してみました。
結果2Core分正しく表示されるようになりました。
タスクマネージャーは1Core分しか表示されていないのが不思議
ですが、PDH.DLLは使用していないのでしょうか?
タスクマネージャーで1Coreしか表示されていなかったので、PDH
でも同じになっていると思っていました。
なお機種はNECのMate  PentiumDualCoreE2200  マザーは、NEC
MS7410となっていました。
どうもありがとうございました。


Mr.XRAY  2010-08-05 04:15:46  No: 38832

>結果2Core分正しく表示されるようになりました。

あれっ.マジですか.かなりいい加減な予測だったんですが,
当方も今,テストしてみました.
CPUは以下です.拙作のWMIのサンプルで調べました(笑)
(*\*)はNGでした.(*/*)はOKでした.

Intel(R) Core(TM) i7 CPU  860 @2.80GHz 2.80GHz
Intel64 Family 6 Model 30 Stepping5

MSDNオンラインを見たら,以下のようになっていました.\というのはないですね.
大変失礼しました.インスタンスの子分岐は'/'でした.
サンプルプログラム集のコードも修正しておきます.
いい加減なレスなのに,動作確認ありがとうございました.

/  Separates instance and parent instance.

多分CPUのコントロールICのアルゴリズムが違うのではないかと思っています.

>タスクマネージャーで1Coreしか表示されていなかったので、PDH

タスクマネージャーはどうなふうにやっているんでしょうね?
何かわかったら教えてください.

あっ,CPUコントローラの型式は調べていません.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加