VC++使用GetProcessTimes獲取進程創建時間、銷毀時間、用戶態時間、內核態時間

一、GetProcessTimes函數簡介(微軟MSDN)

微軟提供了一個非常有用的API函數GetProcessTimes用來獲取進程創建時間、銷毀時間、用戶態時間、內核態時間,msdn連接為:GetProcessTimes 函數 (processthreadsapi.h)
其函數原型為:

BOOL GetProcessTimes([in]  HANDLE     hProcess,[out] LPFILETIME lpCreationTime,[out] LPFILETIME lpExitTime,[out] LPFILETIME lpKernelTime,[out] LPFILETIME lpUserTime
);

其參數如下:
參數
其返回值和函數說明如下:
返回值和庫依賴

二、示例程序

相關示例程序如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <Psapi.h>
#include <winnt.h>
#include <winternl.h>
#include <chrono>
#include <iostream>using namespace std;
using namespace std::chrono;void test_GetProcessTimes()
{HANDLE     processHandle = GetCurrentProcess();DWORD      currentProcessId = GetProcessId(processHandle);FILETIME createTime, exitTime, kernelTime, userTime;// 獲取當前進程的PIDDWORD pid = GetCurrentProcessId();printf("pid: %d\t currentProcessId: %d\n", pid, currentProcessId);GetProcessTimes(processHandle, &createTime, &exitTime, &kernelTime, &userTime);printf("processHandle: %lu\t currentProcessId: %d\n", HandleToULong(processHandle), currentProcessId);printf("Create time: %lu\t       %lu\nExit Time: %lu\t     %lu\nKernel time: %lu\t       %lu\nUser time: %lu\t    %lu\n",createTime.dwLowDateTime, createTime.dwHighDateTime,exitTime.dwLowDateTime, exitTime.dwHighDateTime,kernelTime.dwLowDateTime, kernelTime.dwHighDateTime,userTime.dwLowDateTime, userTime.dwHighDateTime);::CloseHandle(processHandle);
}// 返回進程pid創建時間到現在時間經過的秒數
double get_uptime_sec(DWORD pid)
{double r{ 0 };HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);if (hProcess){FILETIME creationTime, exitTime, kernelTime, userTime;if (::GetProcessTimes(hProcess, &creationTime, &exitTime, &kernelTime, &userTime)) {LARGE_INTEGER tCreate;tCreate.LowPart = creationTime.dwLowDateTime;tCreate.HighPart = creationTime.dwHighDateTime;std::cout << "tCreate: " << tCreate.QuadPart << std::endl;int64_t tt = (static_cast<int64_t>(creationTime.dwHighDateTime) << 32) | creationTime.dwLowDateTime;std::cout << "tt: " << tt << std::endl;SYSTEMTIME stCreate;FileTimeToSystemTime(&creationTime, &stCreate);r = (double)stCreate.wHour * 3600.0 +(double)stCreate.wMinute * 60.0 +(double)stCreate.wSecond +(double)stCreate.wMilliseconds / 1000.0;std::cout << "r: " << r << std::endl;}::CloseHandle(hProcess);}return r;
}

三、進一步擴展:獲取每個進程一段時間內的CPU使用率

由于GetProcessTimes 函數可以獲取某個進程的在內核模式下執行的時間量和用戶模式下執行的時間量(以100納秒為單位)。我們可以先使用NtQuerySystemInformation函數獲取每個CPU核心的總的用戶態、內核態、空閑時間總時間量sysTotalTime,然后遍歷枚舉當前系統所有運行進程,再用GetProcessTimes去獲取每個進程的在內核模式下執行的時間量和用戶模式下執行的時間量,除以sysTotalTime即為該進程的CPU使用率。開一個線程每隔一段時間,比如說250毫秒、500毫秒、1秒、2秒等定時輪詢獲取。
參考ProcessHacker的源代碼,它里面也大體是這個思路。

四、參考資料

  • getProcessTimes 函數 (processthreadsapi.h)

  • How to retrieve the running-time of a process

  • How to get Process Uptime in Windows

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212994.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212994.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux內核--內存管理(六)補充--內核頁表及內核虛擬空間

目錄 一、引言 二、內核頁表的結構 ------>2.1、頁表項結構 ------>2.2、swapper_pg_dir ------>2.3、內核頁表布局 ------>2.4、物理/虛擬 地址轉換 ------>2.5、頁表容量及表項偏移 ------>2.6、表項掩碼及控制區域 ------>2.7、頁標志位 ---…

【測試發布】

學習目標&#xff1a; 提示&#xff1a;這里可以添加學習目標 例如&#xff1a; 一周掌握 Java 入門知識 學習內容&#xff1a; 提示&#xff1a;這里可以添加要學的內容 例如&#xff1a; 搭建 Java 開發環境掌握 Java 基本語法掌握條件語句掌握循環語句 學習時間&#x…

基于NIQE算法的圖像無參考質量評價算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1 空域NSS特征提取 4.2 圖像塊選取 4.3 MVG模型 4.4 NIQE指標 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 MATLAB2022a 3.部分核心程序 clc; clear; close all; …

輕量封裝WebGPU渲染系統示例<46>- 材質組裝管線(MaterialPipeline)燈光、陰影、霧以及多Pass(源碼)

當前示例源碼github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MaterialPipelineMultiPasses.ts 當前示例運行效果: 此示例基于此渲染系統實現&#xff0c;當前示例TypeScript源碼如下&#xff1a; export class MaterialPipelin…

Python----內置模塊

1、什么是Python模塊 Python 模塊(Module)&#xff0c;是一個Python 文件&#xff0c;以 .py 結尾&#xff0c;包含了 Python 對象定義和Python語句。模塊能定義函數&#xff0c;類和變量&#xff0c;模塊里也能包含可執行的代碼。 2、模塊的分類 在Python中&#xff0c;模塊…

[ffmpeg] AVFrame 功能整理

背景 AVFrame 主要用來存儲編碼前的原始數據。 AVFrame 結構體 在 frame.h 文件中 主要變量 uint8_t *data[AV_NUM_DATA_POINTERS]; // 存儲每個 planes 的數據 int linesize[AV_NUM_DATA_POINTERS]; // 每一行的音視頻數據 uint8_t **extended_data; // 視頻&#xff0c;…

java實現網絡聊天

網絡聊天實現步驟&#xff08;從功能談論方法&#xff09;&#xff1a; 客戶端&#xff1a; 1.登錄面板&#xff1a;注冊提醒用戶注冊格式&#xff0c;登錄賬號密碼不為空&#xff0c;點擊登錄的時候需要連接服務器端&#xff0c;啟動聊天面板。&#xff08;監聽用戶點擊登錄…

Windows下nginx的啟動,重啟,關閉等功能bat腳本

echo off rem 提供Windows下nginx的啟動&#xff0c;重啟&#xff0c;關閉功能echo begincls ::ngxin 所在的盤符 set NGINX_PATHG:::nginx 所在目錄 set NGINX_DIRG:\projects\nginx-1.24.0\ color 0a TITLE Nginx 管理程序增強版CLSecho. echo. ** Nginx 管理程序 *** echo.…

JAVA使用HTTP代碼示例

你好&#xff0c;Java開發者們&#xff01;今天&#xff0c;我要給你們帶來一場硬核的盛宴&#xff0c;那就是在Java中使用HTTP協議進行網絡通信的代碼示例。準備好接受挑戰了嗎&#xff1f;Lets go&#xff01; 首先&#xff0c;我們需要導入一些必要的庫&#xff0c;它們將成…

C++枚舉類

枚舉 C11有作用域枚舉和無作用域枚舉 無作用域枚舉 特點 全局作用域&#xff1a;無作用域枚舉的成員&#xff08;枚舉值&#xff09;在包含它們的作用域內是直接可見的&#xff0c;不需要使用枚舉類型名稱作為前綴。 隱式類型轉換&#xff1a;無作用域枚舉的成員可以隱式地轉換…

鴻蒙開發組件之ForEach列表

一、ForEach函數 ForEach函數是一個迭代函數&#xff0c;需要傳遞兩個必須參數和一個可選參數。主要通過迭代來獲取參數arr中的數據不斷的生成單個Item來生成鴻蒙中的列表樣式 二、先創建單個的Item的UI 通過嵌套Row與Column來實現單個Item的UI。例如圖中沒有折扣的可以看成一…

用23種設計模式打造一個cocos creator的游戲框架----(八)適配器模式

1、模式標準 模式名稱&#xff1a;適配器模式 模式分類&#xff1a;結構型 模式意圖&#xff1a;適配器模式的意圖是將一個類的接口轉換成客戶端期望的另一個接口。適配器模式使原本接口不兼容的類可以一起工作。 結構圖&#xff1a; 適用于&#xff1a; 系統需要使用現有的…

309. 買賣股票的最佳時機含冷凍期(leetcode) 動態規劃思想

文章目錄 前言一、題目分析二、算法原理1.狀態表示2.狀態轉移方程3.初始化邊界條件4.填表順序5.返回值是什么 三、代碼實現總結 前言 在本文章中&#xff0c;我們將要詳細介紹一下Leetcode中買賣股票的最佳時機含冷凍期相關的內容&#xff0c;本題采用動態規劃的思想解決 一、…

uniapp藍牙傳輸中文亂碼問題

uniapp藍牙傳輸中文亂碼問題 0 現狀 傳輸數字和字母的json字符串都可以解析&#xff0c;有個中文的硬件那邊就解析不了&#xff0c;替換一下發數據的處理函數即可 1 原先字符串轉化函數 const stringToBytes (msg) > {const buffer new ArrayBuffer(msg.length)const …

eclipse中一些文件的作用

.idea文件夾 .idea和.settings文件夾是IntelliJ IDEA的配置文件夾&#xff0c;用于存儲項目的配置信息。這些文件夾中包含了許多XML文件&#xff0c;這些XML文件包含了項目的各種配置信息&#xff0c;例如編譯選項、運行配置、代碼樣式、版本控制等等。 包含了一些名為modules.…

PyQt6 QDateEdit日期控件

?鋒哥原創的PyQt6視頻教程&#xff1a; 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計39條視頻&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面開發 視頻教程(無廢話…

多數元素算法(leetcode第169題)

題目描述&#xff1a; 給定一個大小為 n 的數組 nums &#xff0c;返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。你可以假設數組是非空的&#xff0c;并且給定的數組總是存在多數元素。示例 1&#xff1a;輸入&#xff1a;nums [3,2,3] 輸出&am…

Python:可以做什么?

簡介 Python是一種高級編程語言&#xff0c;因其簡單易學、代碼可讀性強和擁有豐富的標準庫而廣受歡迎。Python可以用于許多不同領域&#xff0c;主要包括&#xff1a; 數據分析與數據科學&#xff1a;Python有強大的數據處理和分析庫&#xff0c;如Pandas、NumPy和SciPy&…

空中消防員:無人機森林防火應用全面升級

森林是生態系統的重要組成部分&#xff0c;也是人類得以生存的關鍵。我國森林面積廣大&#xff0c;存在火災頻發的困境。提升森林火災防控能力是維護生態平衡、保護資源和保障人民生命安全的必要步驟。隨著無人機技術的發展&#xff0c;其在無人機森林防火中的應用為傳統巡查工…

Linux PSI-----Pressure Stall information

PSI——壓力阻塞信息 當CPU、memory或IO設備處于競爭狀態&#xff0c;業務負載會遭受時延毛刺、吞吐量降低&#xff0c; 及面臨OOM的風險。 如果沒有一種準確的方法度量系統競爭程度&#xff0c;則有兩種后果&#xff1a;一種是用戶過于節制&#xff0c; 未充分利用系統資源&…