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...

相关推荐
IT_陈寒19 分钟前
Vite5.0性能翻倍秘籍:7个极致优化技巧让你的开发体验飞起来!
前端·人工智能·后端
Edward.W24 分钟前
用 Go + HTML 实现 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 实战)
开发语言·后端·golang
南囝coding1 小时前
Claude 封禁中国?为啥我觉得是个好消息
前端·后端
六边形工程师1 小时前
Docker安装神通数据库ShenTong
后端
六边形工程师1 小时前
快速入门神通数据库
后端
重生成为编程大王1 小时前
FreeMarker快速入门指南
java·后端
Dear.爬虫1 小时前
Golang的协程调度器原理
开发语言·后端·golang
元闰子1 小时前
怎么用CXL加速数据库?· SIGMOD'25
数据库·后端·面试
幂简集成2 小时前
GraphQL API 性能优化实战:在线编程作业平台指南
后端·性能优化·graphql
编码浪子2 小时前
趣味学RUST基础篇(构建命令行程序1)
开发语言·后端·rust