欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++獲取Windows平臺(tái)CPU占用率的方法

 更新時(shí)間:2023年12月31日 09:09:13   作者:CBDDL差不多得了  
最近在做系統(tǒng)信息相關(guān)的接口,為了實(shí)現(xiàn)跨平臺(tái),故在linux和Windows平臺(tái)獲取占用率信息,文章主要介紹Windows下的方法,文中給出了參考代碼,需要的朋友可以參考下

一、主要接口

PdhOpenQueryA函數(shù)

此函數(shù)主要作用是:創(chuàng)建從實(shí)時(shí)源或日志文件收集性能數(shù)據(jù)的新查詢,返回在后續(xù) PDH 函數(shù)調(diào)用中使用的查詢的句柄。

PdhAddCounterA函數(shù)

此函數(shù)主要功能為:將指定的計(jì)數(shù)器添加到查詢。

PdhCollectQueryData函數(shù)

此函數(shù)主要功能為:收集指定查詢中所有計(jì)數(shù)器的當(dāng)前原始數(shù)據(jù)值,并更新每個(gè)計(jì)數(shù)器的狀態(tài)代碼。 有的數(shù)據(jù)需要兩個(gè)樣本數(shù)據(jù),所以一般步驟為:

  • 調(diào)用 PdhCollectQueryData 以收集第一個(gè)樣本。
  • 調(diào)用 Sleep 函數(shù)以在集合之間至少等待一秒。
  • 再次調(diào)用 PdhCollectQueryData 以收集第二個(gè)樣本。
  • 調(diào)用 PdhGetFormattedCounterValue 函數(shù)以計(jì)算可顯示的值。
  • 重復(fù)步驟 2 到 4。

PdhGetFormattedCounterValue函數(shù)

此函數(shù)主要功能為:計(jì)算指定計(jì)數(shù)器的可顯示值。 

大體的邏輯是:創(chuàng)建句柄->添加計(jì)數(shù)器->收集數(shù)據(jù)->顯示數(shù)據(jù) 

以下是參考代碼:

#include <pdh.h>
#pragma comment(lib, "Pdh.lib")
 
PDH_STATUS status;
PDH_HQUERY query;
PDH_HCOUNTER counter;
 
status = PdhOpenQueryA(NULL, 0, &query);
if (status != ERROR_SUCCESS) {
    return;
}
        
status = PdhAddCounterA(query, "\\Processor(_Total)\\% Idle Time", 0, &counter);
if (status != ERROR_SUCCESS) {
    PdhCloseQuery(query);
    return;
}
 
const int NUM = 10;
PdhCollectQueryData(query);
PDH_RAW_COUNTER rawValueArray[NUM]; // 假設(shè)有00個(gè)取樣值
for (int i = 0; i < NUM; i++)
{
    Sleep(1000);    //阻塞1s
    PdhCollectQueryData(query);
 
    PDH_FMT_COUNTERVALUE value;
    PdhGetRawCounterValue(counter, 0, &rawValueArray[i]);
    status = PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE, NULL, &value);
    if (status == ERROR_SUCCESS) {
        printf("getCpuPercenage: %.2f%\n", value.doubleValue);
    }
    else {
        std::cout << "Error:" << status;
    }
}
        
DWORD dwFirstEntry = 0; // 從第一個(gè)取樣值開(kāi)始
DWORD dwNumEntries = NUM; // 一共10個(gè)取樣值
PDH_STATISTICS stat;
// 計(jì)算統(tǒng)計(jì)信息
status = PdhComputeCounterStatistics(counter, PDH_FMT_DOUBLE, dwFirstEntry, dwNumEntries, rawValueArray, &stat);
 
if (status == ERROR_SUCCESS) {
    printf("Average: %f\n", stat.mean.doubleValue);
    printf("Minimum: %f\n", stat.min.doubleValue);
    printf("Maximum: %f\n", stat.max.doubleValue);
}
else {
    printf("Failed to compute counter statistics: %d\n", status);
}
        
PdhCloseQuery(query);

附上參考鏈接:使用 PDH 函數(shù)使用計(jì)數(shù)器數(shù)據(jù) - Win32 apps | Microsoft Learn

Ps:以上代碼使用的是% Idle Time (處理器在采樣期間空閑的時(shí)間的百分比),因?yàn)槲腋杏X(jué)這個(gè)比% Processor Time (處理器用來(lái)執(zhí)行非閑置線程時(shí)間的百分比)更準(zhǔn)確,可以自行用100減掉。

以上就是C/C++獲取Windows平臺(tái)CPU占用率的方法的詳細(xì)內(nèi)容,更多關(guān)于C/C++獲取Windows CPU占用率的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++ OpenCV實(shí)戰(zhàn)之制作九宮格圖像

    C++ OpenCV實(shí)戰(zhàn)之制作九宮格圖像

    本文將為大家介紹如何使用OpenCV C++ 制作九宮格圖像,即將一張圖像均等分成九份,然后將這九個(gè)小塊按一定間隔拷貝到新畫布上就可以啦。感興趣的可以動(dòng)手試一試
    2022-01-01
  • 一文詳解C++ 智能指針的原理、分類及使用

    一文詳解C++ 智能指針的原理、分類及使用

    智能指針的本質(zhì)就是使用一個(gè)對(duì)象來(lái)接管一段開(kāi)辟的空間,這篇文章就來(lái)給大家介紹介紹C++智能指針的原理,分類及使用方法,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-05-05
  • C++利用opencv實(shí)現(xiàn)單目測(cè)距的實(shí)現(xiàn)示例

    C++利用opencv實(shí)現(xiàn)單目測(cè)距的實(shí)現(xiàn)示例

    本文主要介紹了C++利用opencv實(shí)現(xiàn)單目測(cè)距的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于C++17實(shí)現(xiàn)的手寫線程池

    基于C++17實(shí)現(xiàn)的手寫線程池

    本文主要介紹了基于C++17實(shí)現(xiàn)的手寫線程池,自己實(shí)現(xiàn)了Any類,Semaphore類以及Result類的開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 黑客帝國(guó)數(shù)字雨效果VC6源代碼分享

    黑客帝國(guó)數(shù)字雨效果VC6源代碼分享

    這篇文章主要介紹了黑客帝國(guó)數(shù)字雨效果VC6源代碼分享,本文直接給出實(shí)現(xiàn)代碼,Win7下編譯通過(guò),效果很酷,需要的朋友可以參考下
    2015-02-02
  • C++的get()函數(shù)與getline()函數(shù)使用詳解

    C++的get()函數(shù)與getline()函數(shù)使用詳解

    這篇文章主要介紹了C++的get()函數(shù)與getline()函數(shù)使用詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Opencv實(shí)現(xiàn)視頻播放與進(jìn)度控制

    Opencv實(shí)現(xiàn)視頻播放與進(jìn)度控制

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)視頻播放與進(jìn)度控制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 關(guān)于虛函數(shù)實(shí)現(xiàn)多態(tài)的原理及分析

    關(guān)于虛函數(shù)實(shí)現(xiàn)多態(tài)的原理及分析

    這篇文章主要介紹了C++中如何實(shí)現(xiàn)多態(tài)問(wèn)題,具有很好的參考價(jià)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語(yǔ)言中volatile關(guān)鍵字的深入講解

    C語(yǔ)言中volatile關(guān)鍵字的深入講解

    在程序設(shè)計(jì)中,尤其是在C語(yǔ)言、C++、C#和Java語(yǔ)言中,使用volatile關(guān)鍵字聲明的變量或?qū)ο笸ǔ>哂信c優(yōu)化、多線程相關(guān)的特殊屬性,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言volatile關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)LeetCode(108.將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù))

    C++實(shí)現(xiàn)LeetCode(108.將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(108.將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論