FILETIME结构体
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
} FILETIME, *PFILETIME, *LPFILETIME;
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *LPSYSTEMTIME;
} 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;//时间出错
}