Windows时间的获取和设置:
在Win32编程中,常用的获取系统时间的函数是有两个,即GetLocalTime和GetSystemTime:
void WINAPI GetLocalTime(
__out LPSYSTEMTIME lpSystemTime
);
void WINAPI GetSystemTime(
__out LPSYSTEMTIME lpSystemTime
);
这两个函数的区别是GetLocalTime返回当前的时间,而GetSystemTime返回当前的格林威治时间,这两个函数把返回的时间信息放在了lpSystemTime参数中。
SYSTEMTIME结构定义如下:
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek; //星期
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
相应地,设置系统时间的函数分别是:
BOOL WINAPI SetLocalTime(
__in const SYSTEMTIME *lpSystemTime
);
BOOL WINAPI SetSystemTime(
__in const SYSTEMTIME *lpSystemTime
);
代码实例如下:
#include <windows.h>
#include <stdio.h>
void main()
{
SYSTEMTIME st, lt;
GetSystemTime(&st);
GetLocalTime(<);
printf("The system time is: %02d:%02d/n", st.wHour, st.wMinute);
printf(" The local time is: %02d:%02d/n", lt.wHour, lt.wMinute);
}
计算时间间隔:
时间戳函数GetTickCount用来返回Windows本次启动以来的ms数:
DWORD WINAPI GetTickCount(void);
由于函数返回的是一个32位数,可以表示的范围是1~0xffffffff ms,所以当Windows连续运行49.7天后,计数器会清零并重新开始。该函数主要用来计算两个时间点的间隔,在WindowsNT/2000/XP系统下,函数的精度是10ms。
为了得到更精确的时间间隔值,我们可以使用Windows高精度时间戳函数。Windows在内部维护了一个高精度的计时器,计时的精度取决于计算机的硬件速度。
用QueryPerformanceFrequency函数可以获取该计时器每秒钟的计数值:
BOOL WINAPI QueryPerformanceFrequency(
__out LARGE_INTEGER *lpFrequency //64位计数值
);
根据函数返回的计数值lpFrequency,可以算出计时器的精度为1 000 000/lpFrequency 微秒。
QueryPerformanceCounter函数可用来获取高精度计时器的计数值:
BOOL WINAPI QueryPerformanceCounter(
__out LARGE_INTEGER *lpPerformanceCount
);
当两次调用该函数得到的计数值是X1和X2,而每秒计数值(调用QueryPerformanceFrequency得到的)为Y时,则时间间隔就是:
(X2-X1)*1 000 000/Y (微秒)。
相关文章可见:《WindowsAPI巡礼》---GetSystemTime和GetFileTime
《Windows核心编程》のWindows时间
原创wx5dce75f541ce3 博主文章分类:Windows核心编程 ©著作权
©著作权归作者所有:来自51CTO博客作者wx5dce75f541ce3的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
windows应急响应
Windows应急响应
数据 启动项 临时文件 -
Windows Server 2025 来了
Windows Server 2025来了,微软于2024年1月26日发布了Windows Server 2025的预览版更新,Windows Server 2025是由您的反馈和您希望拥抱混合、自适应云的愿望驱动的。这是2024年度的首个预览版,版本号为Build 26040。
Windows Server 2025 微软Server 2025 Windows 2025来了 微软vNext Server 2025 -
《Windows核心编程》の线程间同步
<br />Windows中线程间同步的方法主要有:事件(Event)、临界区(Critical Section)、互斥量(Mutex)和信号灯(Semaphore)。由于bManualReset参数为FALSE,这样当
windows 编程 winapi semaphore thread -
《Windows核心编程》の定时器
在DOS操作系统中要用到定时器功能的时候一般有两种方法:一是用一个空循环来延时;一是截获时钟中断,计算机的硬件时钟中
windows timer callback initialization winapi -
《Windows核心编程》の线程局部存储TLS
<br />线程局部存储(Thread Local Storage,TLS)用来将数据与一个正在执行的指定线程关联起来。我们在应用程序和DLL中可以使
windows 存储 编程 winapi thread -
《Windows核心编程》---获得内存的当前状态のGlobalMemoryStatusEx
Win32系统中,一个进程可寻址的地址空间是4GB,用户可使用的地址空间是大概是2GB,但这不是说用户可以申请2GB的内存,
windows 编程 磁盘 winapi integer -
《Windows核心编程》---Windows服务
Windows服务(Services),是一些运行在WindowsNT、Windows2000和Windows XP等操作系统下用户环境以外的程序。它不同于一
windows 编程 service winapi null -
《Windows核心编程》の“打开”和“保存”文件对话框
<br />Windows操作系统为一些常用功能提供了一些通用对话框(Common Dialog Box),比如,在不同应用程序中运行打开文件
windows 编程 dialog winapi reference -
《Windows核心编程》の内存操作和内存信息管理
<br />=======================内存操作函数========================<br />1)复制内存使用函数Cop
windows 编程 buffer winapi wrapper