GetTickCount() 函数的作用和用法

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

函数原型

DWORD GetTickCount(void);
php
25 Bytes
© 菜鸟-创作你的创作
返回值

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

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

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

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

include

include

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
© 菜鸟-创作你的创作
代码说明:

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

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

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

include

include

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()。
https://www.52runoob.com/archives/4198

目录
相关文章
|
算法 C语言 C++
C++ std::chrono库使用指南 (实现C++ 获取日期,时间戳,计时等功能)(一)
C++ std::chrono库使用指南 (实现C++ 获取日期,时间戳,计时等功能)
5532 1
|
存储
55【计算机基础知识】大端小端存储
【计算机基础知识】大端小端存储
1051 0
|
安全 网络协议 Ubuntu
【常见开源库的二次开发】HTTP之libcurl库——libcurl使用(二)
【常见开源库的二次开发】HTTP之libcurl库——libcurl使用(二)
3809 2
|
算法 安全 物联网
关于SM2、SM3、SM4、SM9这四种国密算法
本文介绍了四种国密算法——SM2、SM3、SM4和SM9。SM2是一种基于椭圆曲线的非对称加密算法,用于数据加密和数字签名;SM3是哈希算法,用于数字签名和消息完整性验证;SM4是对称加密算法,用于数据加密和解密;SM9是基于标识的非对称密码算法,适用于物联网环境中的数据安全和隐私保护。
10319 121
|
人工智能 Java 程序员
一文彻底搞清楚C语言的条件语句的Switch语句
本文详细介绍了C语言中的switch语句,包括其语法格式、运行流程、示例代码及注意事项。switch语句不仅使多分支选择更加清晰易读,还能在某些情况下提升性能。通过具体实例,如判断月份天数和数字转星期,帮助读者更好地理解和应用这一控制结构。
1078 1
一文彻底搞清楚C语言的条件语句的Switch语句
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
748 1
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
2807 1
|
算法 C++
如何精确计算出一个算法的CPU运行时间?
如何精确计算出一个算法的CPU运行时间?

热门文章

最新文章