相关文章推荐
逆袭的可乐  ·  表单提交后如何做Jquery回调?-腾讯云开 ...·  2 年前    · 
豪情万千的台灯  ·  大数据BI工具Tableau学习【第三期】: ...·  2 年前    · 
健壮的茶壶  ·  [Solved] How to use ...·  2 年前    · 
刚毅的汽水  ·  pyppeteer ...·  2 年前    · 
直爽的机器人  ·  Web安全实践:XSS(2) - 知乎·  2 年前    · 
Code  ›  VC++使用GetProcessTimes获取进程创建时间、销毁时间、用户态时间、内核态时间开发者社区
https://cloud.tencent.com/developer/article/2368692
儒雅的梨子
1 年前
ccf19881030

VC++使用GetProcessTimes获取进程创建时间、销毁时间、用户态时间、内核态时间

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
ccf19881030
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > VC++使用GetProcessTimes获取进程创建时间、销毁时间、用户态时间、内核态时间

VC++使用GetProcessTimes获取进程创建时间、销毁时间、用户态时间、内核态时间

作者头像
ccf19881030
发布 于 2023-12-08 14:38:40
622 0
发布 于 2023-12-08 14:38:40
举报
文章被收录于专栏: ccf19881030的博客

一、GetProcessTimes函数简介(微软MSDN)

微软提供了一个非常有用的API函数 GetProcessTimes 用来获取进程创建时间、销毁时间、用户态时间、内核态时间,msdn连接为: GetProcessTimes 函数 (processthreadsapi.h) 其函数原型为:

代码语言: javascript
复制
BOOL GetProcessTimes(
  [in]  HANDLE     hProcess,
  [out] LPFILETIME lpCreationTime,
  [out] LPFILETIME lpExitTime,
  [out] LPFILETIME lpKernelTime,
  [out] LPFILETIME lpUserTime
);

其参数如下: 其返回值和函数说明如下:

二、示例程序

相关示例程序如下所示:

代码语言: javascript
复制
#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;
	// 获取当前进程的PID
	DWORD 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;
 
推荐文章
逆袭的可乐  ·  表单提交后如何做Jquery回调?-腾讯云开发者社区-腾讯云
2 年前
豪情万千的台灯  ·  大数据BI工具Tableau学习【第三期】:数据类型,功能区和卡参考,文件类型(连接方式)_51CTO博客_tableau 大数据
2 年前
健壮的茶壶  ·  [Solved] How to use JavaScript in ASP.Net - CodeProject
2 年前
刚毅的汽水  ·  pyppeteer 在debugging状态下驱动chrome浏览器_FOAF-lambda的博客-CSDN博客
2 年前
直爽的机器人  ·  Web安全实践:XSS(2) - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号