内容:
Q:如何获取时间?精度如何?
A:
1 使用 time_t time( time_t * timer ) 精确到秒
计算时间差使用 double difftime( time_t timer1, time_t timer0 )
2 使用 clock_t clock() 得到的是 CPU 时间 精确到 1/CLOCKS_PER_SEC 秒
3 使用 DWORD GetTickCount() 得到的是系统运行的时间 精确到毫秒
4 如果使用 MFC 的 CTime 类,可以用 CTime::GetCurrentTime() 精确到秒
5 要获取高精度时间,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency) 获取系统的计
数器的频率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) 获取计数
器的值
然后用两次计数器的差除以 Frequency 就得到时间。
6 还有 David 的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高
Q:GetTickCount() 函数,说是毫秒记数,是真的吗,还是精确到 55 毫秒?
A:
GetTickCount() 和 GetCurrentTime() 都只精确到 55ms(1 个 tick 就是 55ms)。如果要精确到毫
秒,应该使用 timeGetTime 函数或 QueryPerformanceCounter 函数。具体例子可以参考
QA001022 "VC++ 中使用高精度定时器 "、QA001813 "如何在 Windows 实现准确的定时 "和
QA004842 "timeGetTime 函数延时不准 "。
Q:vc++ 怎样获取系统时间,返回值是什么类型的变量呢?
GetSystemTime 返回的是格林威志标准时间
GetLocalTime ,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // address of system time structure
);
函数就可以获得了,其中 LPSYSTEMTIME 是个结构体
含:年,月,日,周几,小时,分,秒,毫秒。
以下是 Time 的 MSDN 文档 :
Compatibility in the Introduction.
Libraries
LIBC.LIBSingle thread static library, retail versionLIBCMT.LIBMultithread static library, retail
versionMSVCRT.LIBImport library for MSVCRT.DLL, retail version
Return Value
time returns the time in elapsed seconds. There is no error return.
Parameter
timer
Storage location for time
Remarks
评论0
最新资源