プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

[HSP]CPU使用率のサンプル(1)

2017年09月14日 23時55分01秒 | HSP講座

スクリプト言語の HSP については、公式ホームページの「HSPTV!」をどうぞ。(戻る)


ここには、CPU使用率のサンプル・ソースを載せておきます。
Win32API 関数のパフォーマンス・カウンタ群を使います。
C言語版の「CPU使用率の取得」をHSP版に書き下ろしたサンプルです。

また、記号定数(MSG_xxx)でCPUコア0番~CPUコア3番までのCPU使用率も取得できるようになってます。
下記のソースの一部を書き換えることでCPUのコア毎の使用率を取得可能です。
書き換える箇所はソースの下に書いてあります。

技術資料

関連カテゴリ

動作確認のサンプル

管理上このサンプルは sample203a(CPU使用率のサンプル).hsp のソースです。

//------------------------------------------------------------------------------
// CPU使用率のサンプル(1) by 科学太郎
//==============================================================================
// @URL(https://msdn.microsoft.com/ja-jp/library/cc429557.aspx)→「PdhOpenQuery」
// @URL(https://msdn.microsoft.com/en-us/library/aa372558.aspx)→「PdhCloseQuery」
// @URL(https://msdn.microsoft.com/en-us/library/aa372204.aspx)→「PdhAddCounter」
// @URL(https://msdn.microsoft.com/en-us/library/aa372563.aspx)→「PdhCollectQueryData」
// @URL(https://msdn.microsoft.com/ja-jp/library/cc429547.aspx)→「PdhGetFormattedCounterValue」
// @URL(https://msdn.microsoft.com/en-us/library/aa373050.aspx)→「PDH_FMT_COUNTERVALUE」
//------------------------------------------------------------------------------

//--------------------------------------
// Win32API関数の呼び出し定義
//--------------------------------------
#uselib "Pdh.dll"
#func global PdhOpenQuery                   "PdhOpenQueryA"                 sptr,sptr,sptr
#func global PdhCloseQuery                  "PdhCloseQuery"                 sptr
#func global PdhAddCounter                  "PdhAddCounterA"                sptr,sptr,sptr,sptr
#func global PdhCollectQueryData            "PdhCollectQueryData"           sptr
#func global PdhGetFormattedCounterValue    "PdhGetFormattedCounterValue"   sptr,sptr,sptr,sptr

//--------------------------------------
// 記号定数(API定数)
//--------------------------------------
#const global NULL                      0
#const global ERROR_SUCCESS             $00000000
#const global PDH_FMT_LONG              $00000100
#const global PDH_FMT_DOUBLE            $00000200

//--------------------------------------
// 記号定数
//--------------------------------------
#define MSG_CPU         "\\Processor(_Total)\\%% Processor Time"
#define MSG_CPU0        "\\Processor(0)\\%% Processor Time"
#define MSG_CPU1        "\\Processor(1)\\%% Processor Time"
#define MSG_CPU2        "\\Processor(2)\\%% Processor Time"
#define MSG_CPU3        "\\Processor(3)\\%% Processor Time"

//--------------------------------------
// メイン部
//--------------------------------------
*Init
    dim hQuery                          ;問い合わせのハンドル(PDH_HQUERY)
    dim hCounter                        ;カウンターのハンドル(PDH_HCOUNTER)
    dim fmtValue,3                      ;取得データの構造体(PDH_FMT_COUNTERVALUE)
    dupptr fmtDouble,varptr(fmtValue(2)),8,vartype("double")
*Main
    screen 0,640,480,SCREEN_NORMAL|SCREEN_FIXEDSIZE
    syscolor 15:boxf:color:title "CPU使用率のサンプル(1) by 科学太郎"
    ;初期化
    PdhOpenQuery NULL,0,varptr(hQuery)
    if(stat!=ERROR_SUCCESS):dialog "クエリーをオープンできません。",1,"確認":end
    PdhAddCounter hQuery,MSG_CPU,0,varptr(hCounter)
    PdhCollectQueryData hQuery
    ;CPU使用率
    repeat
        stick k:if(k & $80):break       ;[ESC]キーで抜ける
        redraw 0
        syscolor 15:boxf:color:pos 0,0
        PdhCollectQueryData hQuery
        ;整数
        PdhGetFormattedCounterValue hCounter,PDH_FMT_LONG,NULL,varptr(fmtValue)
        mes strf("整数値:%3d %%",fmtValue(2))
        ;実数
        PdhGetFormattedCounterValue hCounter,PDH_FMT_DOUBLE,NULL,varptr(fmtValue)
        mes strf("実数値:%6.2f %%",fmtDouble)
        redraw 1
        await 500
    loop
    ;後始末
    PdhCloseQuery hQuery
    end
//------------------------------------------------------------------------------
// End of sample203a.hsp
//------------------------------------------------------------------------------
  • 上記のソース内で「MSG_CPU」定数を「MSG_CPU0」定数に変更するとCPUコア0番の使用率を表示します。
  • 上記のソース内で「MSG_CPU」定数を「MSG_CPU1」定数に変更するとCPUコア1番の使用率を表示します。
  • 上記のソース内で「MSG_CPU」定数を「MSG_CPU2」定数に変更するとCPUコア2番の使用率を表示します。
  • 上記のソース内で「MSG_CPU」定数を「MSG_CPU3」定数に変更するとCPUコア3番の使用率を表示します。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« [HSP]クリーニングのサンプル | トップ | [HSP]CPU使用率のサンプル(2) »
最新の画像もっと見る

コメントを投稿

HSP講座」カテゴリの最新記事