FILETIME 、SYSTEMTIME的转换

本文介绍了FILETIME和SYSTEMTIME两种Windows系统中用于记录时间的数据结构,并提供了一个使用FILETIME来计算进程CPU占用时间的示例。通过100纳秒精度的时间间隔,可以精确地测量进程的CPU使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

FILETIME结构体

typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
 
typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME, *LPSYSTEMTIME;
FILETIME和SYSTEMTIME都只是记录时间的结构。
GetLocalTime能够得到本地电脑设置时区的时间,得到的类型是SYSTEMTIME的类型。
MSND关于FILETIME的说明:
Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC).
因此,通常的换算情况为:
#define  PER_SECOND    1*10*1000*1000     //1秒
依次类推,1小时就是36000000000;1天就是864000000000

一个使用例子如下:
//获取进程的cpu占用时间,间隔为上次调用该函数到这次调用该函数
//返回单位为微妙
DWORD CpuOccupyTime( HANDLE hCurrProcess )
{
if( NULL == hCurrProcess )
return -1;

DWORD ret;

FILETIME createTime;
FILETIME exitTime;

FILETIME kernelTime;
FILETIME userTime;
static FILETIME lastKernelTime;
static FILETIME lastUserTime;

BOOL timeSucc = GetProcessTimes( hCurrProcess, (LPFILETIME)(&createTime), 
(LPFILETIME)(&exitTime), (LPFILETIME)(&kernelTime), (LPFILETIME)(&userTime) );

if( timeSucc )
{
UINT64 tempKenelTime_ = kernelTime.dwHighDateTime - lastKernelTime.dwHighDateTime;
tempKenelTime_ = (tempKenelTime_ << 32) + kernelTime.dwLowDateTime -  lastKernelTime.dwLowDateTime;

UINT64 tempUserTime_ = userTime.dwHighDateTime - lastUserTime.dwHighDateTime;
tempUserTime_ = (tempUserTime_ << 32) + userTime.dwLowDateTime -  lastUserTime.dwLowDateTime;

lastKernelTime = kernelTime;
lastUserTime = userTime;

//tempKenelTime_,tempUserTime_时间单位为100纳秒
ret = DWORD( (tempKenelTime_ + tempUserTime_)/10 );
return ret>=0 ? ret:-1;
}

return -1;//时间出错
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值