win32 6.2 windows 时间

  1. “定时器”与“时钟”的联系:
    很多读者一开始看到“定时器”这个词,往往就联想到时钟,但是,经过我们前一章的探索,可以发现,“定时器”这种特征明显不能用来构造时钟,定时器用于时钟程序只能是用于定时器刷新屏幕这个功能上,要得到系统的时间还是要靠别的方法。
  2. Windows时间的获取和设置
    1. Windows获取系统时间的函数:
      在这里插入图片描述
      1. 它们之间区别:
        1. GetLocalTime 返回 当前时间。
        2. GetSystemTime 返回 当前的格林威治标准时间。
      2. 使用方法:
        1. 这两个时间返回的时间数据包括 年、月、日、时、分、秒、毫秒、以及星期,由于数据比小朵,所以无法放在 eax 中返回,应用程序需要先设置一个 SYSTEMTIME 结构的缓冲区,并将缓冲区地址 lpSystemTime 当参数传递给函数,函数会把时间数据返回到这个缓冲区中。
        2. SYSTEMTIME结构如下如:在这里插入图片描述
        3. 数据长度转换:
          需要注意的是,结构中的字段全部是 word 类型的,而由于win32程序中用的往往是 dword 型变量,所以在使用这些数据之前往往要先把它们转换成 dword类型,用 movzx指令就可以很方便地完成这个工作。
    2. 设置系统时间:
      1. 设置系统时间使用的函数:
        在这里插入图片描述
      2. 使用说明:同样,SetLocalTime中的参数代表本地时间,SetSystemTime中的参数代表格林威治标准时间,在调用函数之前,要把需要设置的时间放到一个SYSTEMTIME 结构中并把其地址当作参数传递给 Windows。
  3. 计算时间间隔:
    1. 初步介绍:
      在实际过程中,经常要计算距离上次的时间点已经过去了多少时间,当然,这个数据可以通过两次调用 GetLocalTime函数并将两次的时间值相减来得到,唯一的麻烦就是计算的过程比较复杂,因为返回数据有 年,月,日····,将两个时间相减要涉及借位相减等问题。
    2. 时间戳函数 GetTickCount :
      1. 介绍:
        使用本地时间戳函数 GetTickCount 可以方便地完成这个功能,GetTickCount 函数返回的是Windows本次启动以来的ms数,得到的时间数值直接在eax中返回,这是一个32位的整数,所以,当Windows连续运行49.7天以后,计数器会清零并重新开始。
      2. GetTickCount 的使用:
        在这里插入图片描述 在当前的windows系统下,其函数的精度是 10ms。
    3. 高精度的计时器:
      1. 在Windows系统内部维护了一个高精度的计时器,计时的精度取决于计算机的硬件速度,用 QueryPerformanceFrequency 函数可以获取该计时器每秒钟的计数值: 在这里插入图片描述
      2. 位数转换:
        1. 由于计数值比较大,一个32位整数无法弄让,所以该函数的参数指向一个 qword,函数运行后在该qword中返回一个64位的值。
        2. 根据该技术值就可以计算出计时器的精度为 1 000 000 / dqFreq 微秒。当CPU 主频比较高的时候,计数器会比较大,意味着计数器的精度比较高。
      3. 这个由于我们很少用到,所以在这里只是简单提一下,当真正用到的时候再去查阅相关资料即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值