HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0502
aoisensiマルチコアCPUの個々のCPU使用率の取得方法について5解決


aoisensi

リンク

2012/5/2(Wed) 10:49:14|NO.46406

マルチコアCPUの個々のCPU使用率の取得方法がわかりません!
http://msdn.microsoft.com/ja-jp/library/cc429248.aspx
ここを読みあさりましたが全くわかりません!
どなたかご教授願います!



この記事に返信する


暇人

リンク

2012/5/2(Wed) 19:04:25|NO.46415

>マルチコアCPUの個々のCPU使用率の取得方法がわかりません!
それは個別で無ければ取得は出来てるって事?
それともPdh.Dll使い方から分からないって事?



ほげぴよ

リンク

2012/5/2(Wed) 20:25:51|NO.46417

> マルチコアCPUの個々のCPU使用率の取得方法がわかりません!
個々のコアの使用率ということでOK?
それなら下のURLが参考になります。
付いているプログラムはDelphiだけどやり方は書いてあります。
http://w-shadow.com/blog/2009/04/17/per-core-cpu-usage/



なたで

リンク

2012/5/2(Wed) 21:20:34|NO.46418

以前作ったものなのですが、
参考になるかもしれません。

http://www.placeark.com/program_hsp_sample_file/SAMPLE_GetCPUUsage.hsp



aoisensi

リンク

2012/5/3(Thu) 21:28:22|NO.46438

みなさんありがとうございます!
なたでさんのスクリプトを見て勉強させて頂きます!



暇人

リンク

2012/5/3(Thu) 23:28:24|NO.46445

結局どっちの分からないだったのか分からなかったが・・・


#module #uselib "Pdh" #func _PdhOpenQuery "PdhOpenQuery" sptr,sptr,sptr #func _PdhCloseQuery "PdhCloseQuery" sptr #func global PdhCollectQueryData "PdhCollectQueryData"sptr #func global PdhAddCounter "PdhAddCounterA" sptr,sptr,sptr,sptr #func global PdhGetFormattedCounterValue "PdhGetFormattedCounterValue" sptr,sptr,sptr,sptr #func global PdhExpandWildCardPath "PdhExpandWildCardPathA" sptr,sptr,sptr,sptr,sptr #define global PDH_FMT_LONG 0x00000100 #define global PDH_FMT_DOUBLE 0x00000200 #define global PDH_FMT_LARGE 0x00000400 #define global PDH_FMT_NOSCALE 0x00001000 #define global PDH_FMT_1000 0x00002000 #define global PDH_FMT_NOCAP100 0x00008000 #deffunc PdhOpenQuery int phQ PdhCloseQuery //二個以上開かない _PdhOpenQuery 0, 0, phQ if stat<0 {dialog "PdhOpenQuery\nerr"+strf(" 0x%08x",stat):end} phQuery=phQ return #deffunc PdhCloseQuery onexit //終了時に呼び出される if phQuery {//現在オープンされてるQueryを閉じる dupptr hQuery,phQuery,4,4 _PdhCloseQuery hQuery phQuery=0 if stat<0 {dialog "PdhCloseQuery\nerr"+strf(" 0x%08x",stat)} } return #global set_wait=200 //更新タイミング設定 pcchPathListLength=2048 //このサイズ分しか出力されないので多めに設定 sdim mszExpandedPathList,pcchPathListLength+1 PdhExpandWildCardPath 0,"\\Processor(*/*)\\% Processor Time",varptr(mszExpandedPathList),varptr(pcchPathListLength),0 //CPUcoreの数取得 if stat<0 {dialog "PdhExpandWildCardPath\nerr"+strf(" 0x%08x",stat):end} hQuery=0 //ハンドルが出力される変数 PdhOpenQuery varptr(hQuery) CPUcores=0 index=0 dim hCounter,1 //パフォーマンスカウンタのハンドルが出力される変数 repeat i=instr(mszExpandedPathList,index,"\\Processor(") //コンピューター名を取り除く if i<0{break} index+i getstr TEXT(cnt),mszExpandedPathList,index,'' index+strsize+1 //一行にNull文字が含まれてるから+1 if instr(TEXT(cnt),0,"\\Processor(_Total)") = 0 {Totalcore=CPUcores : /*ここでbreakすればトータル用のカウンタを追加しない*/} PdhAddCounter hQuery,TEXT(cnt),0, varptr(hCounter(cnt)) //パフォーマンスカウンタをクエリーに追加 if stat<0 {dialog "PdhAddCounter \nerr"+strf(" 0x%08x",stat):end} mes TEXT(cnt) CPUcores++ //_Total含む loop PdhCollectQueryData hQuery //クエリー中のパフォーマンスカウンタの更新 if stat<0 {dialog "PdhCollectQueryData \nerr"+strf(" 0x%08x",stat):end} wait 100 ddim cpu,2 //PdhGetFormattedCounterValueで使用する(PDH_FMT_DOUBLE用) repeat PdhCollectQueryData hQuery //クエリー中のパフォーマンスカウンタの更新 color boxf 300,100,500,400 repeat CPUcores PdhGetFormattedCounterValue hCounter(cnt),PDH_FMT_DOUBLE ,0,varptr(cpu) //指定したカウンタの現在の値を特定の形式で取得 pos 310,110+cnt*20 if stat<0 { mes TEXT(cnt)+" err"+strf(" 0x%08x",stat) }else{ if Totalcore=cnt { color 0,240,255 mes strf("平均[%.2f%%]",cpu(1)) }else{ color 255*(cnt\2),250,50 mes strf("cpu%d[%.2f%%]",cnt,cpu(1)) //データがあるのは要素1 } } loop wait set_wait loop
定数とか命令名が載ってるPDH.H、winperf.h、pdhmsg.hなんかはここから
http://www.koders.com/c/fidDA4DBE445D87D2310E14B713125975F192048F96.aspx



ONION software Copyright 1997-2023(c) All rights reserved.