GetTickCount() 函数的作用和用法

GetTickCount() 函数是 Windows API 中的一个重要函数,用于获取自系统启动以来经过的毫秒数。这个函数通常用于计算时间间隔、性能分析和定时等场景。

函数原型

arduino 复制代码
DWORD GetTickCount(void);
php
25 Bytes
© 菜鸟-创作你的创作

返回值

  • 返回类型DWORD(无符号 32 位整数)
  • 返回值 :返回自系统启动以来经过的毫秒数。返回值的最大值是 0xFFFFFFFF(即 4,294,967,295 毫秒,约 49.7 天)。当这个值超出 DWORD 的最大值时,会从 0 开始重新计数。

常见用途

  1. 测量时间间隔
    GetTickCount() 可用于计算某个操作的时间间隔,尤其是在没有高精度计时器的情况下,适用于需要较为粗略时间计算的场景。
  2. 超时检查
    你可以通过记录一个起始时间,然后不断检查是否经过了指定的时间,以此来判断是否发生了超时事件。

示例代码

以下是一个使用 GetTickCount() 测量程序执行时间的简单示例:

示例 1: 计算代码执行时间

c 复制代码
#include <windows.h>
#include <iostream>
int main() {
    // 获取开始时间
    DWORD startTime = GetTickCount();
    // 模拟某些操作(例如延时)
    Sleep(2000);  // 延时2秒
    // 获取结束时间
    DWORD endTime = GetTickCount();
    // 计算时间差
    DWORD elapsedTime = endTime - startTime;
    std::cout << "Elapsed time: " << elapsedTime << " milliseconds" << std::endl;
    return 0;
}
php
363 Bytes
© 菜鸟-创作你的创作

代码说明

  1. GetTickCount() 获取程序启动以来的毫秒数。
  2. 使用 Sleep(2000) 函数让程序暂停 2000 毫秒(即 2 秒),模拟某些操作。
  3. 再次调用 GetTickCount() 获取结束时间。
  4. 计算起始时间和结束时间的差值,即为操作执行的时间间隔。

注意事项

  • 溢出问题GetTickCount() 返回的是一个 DWORD 类型的值,最大值为 0xFFFFFFFF,约 49.7 天。即如果系统持续运行超过 49.7 天,返回值会回绕至 0。如果需要避免溢出问题,推荐使用 GetTickCount64()(在 64 位系统中可用)来获取更大的计时范围。
  • 精度限制GetTickCount() 的精度大约是 10 毫秒,这意味着它不是高精度计时器。如果需要更高精度的时间测量,可以使用 QueryPerformanceCounter()

使用 GetTickCount64() 代替

如果你需要避免 GetTickCount() 溢出的问题,可以使用 GetTickCount64(),这是一个类似的函数,返回一个 64 位的值,计时范围大大增加。

c 复制代码
#include <windows.h>
#include <iostream>
int main() {
    // 获取64位的启动时间
    ULONGLONG startTime = GetTickCount64();
    // 模拟某些操作(例如延时)
    Sleep(2000);  // 延时2秒
    // 获取结束时间
    ULONGLONG endTime = GetTickCount64();
    // 计算时间差
    ULONGLONG elapsedTime = endTime - startTime;
    std::cout << "Elapsed time: " << elapsedTime << " milliseconds" << std::endl;
    return 0;
}
php
383 Bytes
© 菜鸟-创作你的创作

GetTickCount64() 返回的值是一个 ULONGLONG 类型的 64 位整数,可以避免 49.7 天的溢出问题。

总结

  • GetTickCount() 是一个用来获取系统启动以来的毫秒计时函数,适合用于粗略的时间间隔计算。
  • 它返回一个 32 位的无符号整数,如果系统运行超过大约 49.7 天,返回值会溢出。
  • 如果需要更大的计时范围或更高精度的时间测量,可以使用 GetTickCount64()QueryPerformanceCounter()

www.52runoob.com/archives/41...

相关推荐
步行cgn15 分钟前
Spring Boot 将配置绑定到第三方对象详解
spring boot·后端·python
码事漫谈9 小时前
多人共用一个 key,缓存命中率会不会因此降低?
后端
考虑考虑9 小时前
docker compose环境变量替换
运维·后端·自动化运维
武雄(小星Ai)10 小时前
飞书API上传26MB文件偶发失败:错误码9499与空响应体排坑实录
后端·api·排坑实录
徐小夕10 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
geovindu12 小时前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
Flynt12 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
IT_陈寒13 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
她的男孩13 小时前
多租户和数据权限怎么共存?扒完拦截器注册链路,我找到 4 个隐蔽的坑
java·后端·架构
用户83562907805113 小时前
使用 Python 设置 Excel 页眉和页脚
后端·python