国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

VC++使用GetProcessTimes獲取進(jìn)程創(chuàng)建時(shí)間、銷毀時(shí)間、用戶態(tài)時(shí)間、內(nèi)核態(tài)時(shí)間

這篇具有很好參考價(jià)值的文章主要介紹了VC++使用GetProcessTimes獲取進(jìn)程創(chuàng)建時(shí)間、銷毀時(shí)間、用戶態(tài)時(shí)間、內(nèi)核態(tài)時(shí)間。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

微軟提供了一個(gè)非常有用的API函數(shù)GetProcessTimes用來獲取進(jìn)程創(chuàng)建時(shí)間、銷毀時(shí)間、用戶態(tài)時(shí)間、內(nèi)核態(tài)時(shí)間,msdn連接為:GetProcessTimes 函數(shù) (processthreadsapi.h)
其函數(shù)原型為:

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

其參數(shù)如下:
VC++使用GetProcessTimes獲取進(jìn)程創(chuàng)建時(shí)間、銷毀時(shí)間、用戶態(tài)時(shí)間、內(nèi)核態(tài)時(shí)間,c++,開發(fā)語言
其返回值和函數(shù)說明如下:
VC++使用GetProcessTimes獲取進(jìn)程創(chuàng)建時(shí)間、銷毀時(shí)間、用戶態(tài)時(shí)間、內(nèi)核態(tài)時(shí)間,c++,開發(fā)語言

二、示例程序

相關(guān)示例程序如下所示:

#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;
	// 獲取當(dāng)前進(jìn)程的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);
}


// 返回進(jìn)程pid創(chuàng)建時(shí)間到現(xiàn)在時(shí)間經(jīng)過的秒數(shù)
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;
}

三、進(jìn)一步擴(kuò)展:獲取每個(gè)進(jìn)程一段時(shí)間內(nèi)的CPU使用率

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

四、參考資料

  • getProcessTimes 函數(shù) (processthreadsapi.h)

  • How to retrieve the running-time of a process

  • How to get Process Uptime in Windows文章來源地址http://www.zghlxwxcb.cn/news/detail-759005.html

到了這里,關(guān)于VC++使用GetProcessTimes獲取進(jìn)程創(chuàng)建時(shí)間、銷毀時(shí)間、用戶態(tài)時(shí)間、內(nèi)核態(tài)時(shí)間的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SOAP學(xué)習(xí)之一:Visual C++創(chuàng)建簡單的客戶端--使用soap toolkit 3.0獲取UTC服務(wù)器時(shí)間

    初始接觸 XML及SOAP第一天,摸不著頭緒,看了很多文章,總結(jié)一下幾點(diǎn)心得,附一個(gè)小例子使用VC++控制臺(tái)程序獲取UTC服務(wù)器時(shí)間。 看到的資料VC++都是使用soap toolkit來使用SOAP,soap toolkit目前看最高版本應(yīng)該是3.0,但是微軟已經(jīng)不再對(duì)soap toolkit提供技術(shù)支持及更新,在微軟官網(wǎng)

    2024年02月09日
    瀏覽(22)
  • Effective第三版 中英 | 第2章 創(chuàng)建和銷毀對(duì)象 | 當(dāng)面臨多個(gè)參數(shù)的構(gòu)造器時(shí)考慮使用構(gòu)建器

    Effective第三版 中英 | 第2章 創(chuàng)建和銷毀對(duì)象 | 當(dāng)面臨多個(gè)參數(shù)的構(gòu)造器時(shí)考慮使用構(gòu)建器

    大家好,這里是 Rocky 編程日記 ,喜歡后端架構(gòu)及中間件源碼,目前正在閱讀 effective-java 書籍。同時(shí)也把自己學(xué)習(xí)該書時(shí)的筆記,代碼分享出來,供大家學(xué)習(xí)交流,如若筆記中有不對(duì)的地方,那一定是當(dāng)時(shí)我的理解還不夠,希望你能及時(shí)提出。如果對(duì)于該筆記存在很多疑惑,

    2024年02月07日
    瀏覽(22)
  • 函數(shù)棧幀的創(chuàng)建與銷毀

    函數(shù)棧幀的創(chuàng)建與銷毀

    魔王的介紹:??????一名雙非本科大一小白。 魔王的目標(biāo):??努力趕上周圍卷王的腳步。 魔王的主頁:??????大魔王.?????? ?????大魔王與你分享:莫泊桑說過,生活可能不像你想象的那么好,但是也不會(huì)像你想象的那么糟。人的脆弱和堅(jiān)強(qiáng)都超乎了自己的想

    2024年02月15日
    瀏覽(18)
  • 函數(shù)棧幀的創(chuàng)建和銷毀

    函數(shù)棧幀的創(chuàng)建和銷毀

    前言 觀察函數(shù)棧幀的創(chuàng)建和銷毀,不要使用太高級(jí)別的的編譯器,越高級(jí)的編譯器越不容易學(xué)習(xí)和觀察。同時(shí)在不同編譯器下,函數(shù)調(diào)用的過程中棧幀的創(chuàng)建是略有差異的,具體細(xì)節(jié)取決于編譯器的實(shí)現(xiàn) 我們?cè)趯慍語言代碼的時(shí)候,經(jīng)常會(huì)把一個(gè)獨(dú)立的功能抽象為函數(shù),所以

    2023年04月17日
    瀏覽(21)
  • 【C語言】函數(shù)棧幀的創(chuàng)建和銷毀

    【C語言】函數(shù)棧幀的創(chuàng)建和銷毀

    ??個(gè)人主頁:Weraphael ???作者簡介:目前正在回爐重造C語言(2023暑假) ??專欄:【C語言航路】 ?? 希望大家多多支持,咱一起進(jìn)步!?? 如果文章對(duì)你有幫助的話 歡迎 評(píng)論?? 點(diǎn)贊???? 收藏 ?? 加關(guān)注?? 在學(xué)習(xí)C語言的時(shí)候,我們可能有很多困惑。比如: 局部變量

    2024年02月13日
    瀏覽(22)
  • 【C語言】函數(shù)棧幀的創(chuàng)建與銷毀

    【C語言】函數(shù)棧幀的創(chuàng)建與銷毀

    今天我們要學(xué)習(xí)的是函數(shù)棧幀的創(chuàng)建與銷毀,學(xué)完這部分內(nèi)容,我們可以解決下面的幾個(gè)問題: 局部變量是怎么創(chuàng)建的? 為什么局部變量的值是隨機(jī)值? 函數(shù)是怎么傳參的?傳參順序是怎樣的? 形參和實(shí)參是什么關(guān)系? 函數(shù)調(diào)用是怎么做的? 函數(shù)調(diào)用是怎么做的? 函數(shù)調(diào)

    2024年02月09日
    瀏覽(21)
  • c語言(函數(shù)棧幀的創(chuàng)建和銷毀)

    c語言(函數(shù)棧幀的創(chuàng)建和銷毀)

    前沿: ? ? ? ? 可能很多人也是第一次聽說函數(shù)棧幀這個(gè)詞,想問什么是函數(shù)棧幀,理解函數(shù)棧幀有什么作用,函數(shù)棧幀的創(chuàng)建銷毀是什么呢?這章節(jié)我們就來了解一下c語言中函數(shù)棧幀的創(chuàng)建和銷毀。 思維導(dǎo)圖: 目錄 ? 一、什么是函數(shù)棧幀 ?1.1?? 函數(shù)棧幀: 1.2? 棧: ?

    2024年02月07日
    瀏覽(33)
  • VC++創(chuàng)建windows服務(wù)程序

    VC++創(chuàng)建windows服務(wù)程序

    目錄 1.關(guān)于windows標(biāo)準(zhǔn)可執(zhí)行程序和服務(wù)程序 2.服務(wù)相關(guān)整理 2.1 VC++編寫服務(wù) 2.2 服務(wù)注冊(cè) 2.3? 服務(wù)卸載 2.4 啟動(dòng)服務(wù) 2.5 關(guān)閉服務(wù) 2.6 sc命令 2.7 查看服務(wù) 3.標(biāo)準(zhǔn)程序 3.1 后臺(tái)方式運(yùn)行標(biāo)準(zhǔn)程序 3.2 查找進(jìn)程 3.3 終止進(jìn)程 ? ? ? ?以前經(jīng)常在Linux下編寫服務(wù)器程序,服務(wù)器程序大多

    2024年02月07日
    瀏覽(19)
  • C語言——詳解函數(shù)棧幀的創(chuàng)建和銷毀

    C語言——詳解函數(shù)棧幀的創(chuàng)建和銷毀

    為了深入學(xué)習(xí)C語言,也為了方便理解,我學(xué)習(xí)了函數(shù)棧幀。函數(shù)棧幀的創(chuàng)建和銷毀能夠讓我更加深刻的了解編程邏輯和語法。我們學(xué)習(xí)語法和編程邏輯都是基于封裝好的知識(shí)上得。因此,我們有必要對(duì)函數(shù)棧幀的創(chuàng)建和銷毀進(jìn)行學(xué)習(xí)。本篇博客將用來介紹函數(shù)棧幀的創(chuàng)建和銷

    2024年02月12日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包