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

目录
相关文章
|
算法 安全 数据安全/隐私保护
DSA与RSA的区别、ECC(椭圆曲线数字签名算法(ECDSA))
DSA与RSA的区别、ECC(椭圆曲线数字签名算法(ECDSA))
1302 0
|
2月前
|
存储 测试技术 数据安全/隐私保护
【Docker项目实战】使用Docker部署dufs文件服务器
【Docker项目实战】使用Docker部署dufs文件服务器
453 17
【Docker项目实战】使用Docker部署dufs文件服务器
|
5月前
|
人工智能 安全 搜索推荐
阿里云AI Stack,加速大模型创新应用
阿里云AI Stack作为面向企业级客户的轻量化、极致性价比、软硬一体AI解决方案,顺利通过了中国信通院《AI大模型一体机技术能力要求》测评。
1041 1
|
10月前
|
存储 编译器 数据库
《C 语言结构体:构建复杂数据模型的基石》
《C 语言结构体:构建复杂数据模型的基石》介绍了C语言中结构体的概念、定义和使用方法,以及如何利用结构体构建复杂的数据模型,是学习C语言和数据结构的重要参考资料。
|
传感器 数据采集 监控
QModbus例程分析
QModbus例程分析
|
11月前
|
SQL 数据库
SQL查询中排除空值列的技巧与方法
在数据库查询中,经常需要处理包含空值(NULL)的数据列
1584 3
|
移动开发 前端开发 JavaScript
游戏开发技术- 请谈谈WebGL与Canvas的区别,以及在什么情况下更适合使用WebGL。
WebGL和Canvas都是网页游戏开发的关键技术。Canvas是2D绘图API,适合初学者和简单的2D游戏,而WebGL是基于OpenGL的3D渲染标准,用于复杂3D图形和游戏,提供GPU硬件加速。当涉及3D渲染、高级视觉效果或高性能需求时,WebGL是更好的选择。对于轻量级2D应用,Canvas就足够了。某些游戏引擎支持两者自动切换,以实现最佳性能和兼容性。
1072 4
|
索引 Windows
技术笔记:RTF文件格式
技术笔记:RTF文件格式
674 0
|
存储 Shell Linux
Android系统 理解/sys/目录权限和UID和GID?
Android系统 理解/sys/目录权限和UID和GID?
1299 0
|
安全 程序员 数据处理
CreateFileMapping函数详解
CreateFileMapping函数详解

热门文章

最新文章