Win10下timeGetTime()是否会像GetTickCount()一样776天后归零?
关于timeGetTime()的溢出重置问题
背景
在Win10系统中,GetTickCount()运行约776天后,数值达到0x9FFFFFF时会重置为0,这一点微软官方文档有明确说明。
核心疑问
timeGetTime()是否也存在同样的776天后重置为0的问题?
我曾尝试用以下代码测试,但无法模拟776天的时间变化,最终放弃:
#include <iostream> #include <windows.h> #include <mmsystem.h> int main() { // 保存起始时间 DWORD startTime = GetTickCount(); DWORD startTime2 = timeGetTime(); LONGLONG startTime3 = GetTickCount64(); while (true) { // 保存当前时间 DWORD currentTime = GetTickCount(); DWORD currentTime2 = timeGetTime(); LONGLONG currentTime3 = GetTickCount64(); // 计算时间差 DWORD diffTime = currentTime - startTime; DWORD diffTime2 = currentTime2 - startTime2; LONGLONG diffTime3 = currentTime3 - startTime3; // 输出时间 SYSTEMTIME st; GetLocalTime(&st); std::cout << "当前日期: " << st.wYear << "/" << st.wMonth << "/" << st.wDay << std::endl; std::cout << "当前时间: " << st.wHour << ":" << st.wMinute << ":" << st.wSecond << "." << st.wMilliseconds << std::endl; std::cout << "GetTickCount("<< currentTime <<"(Days:"<< currentTime / 1000 / 3600 / 24 <<")" << ") 时间差: " << diffTime << " 毫秒" << std::endl; std::cout << " GetTickCount64("<< currentTime3 <<"(Days:"<< currentTime3 / 1000 / 3600 / 24 << ")" <<") 时间差: " << diffTime3 << " 毫秒" << std::endl; std::cout << " timeGetTime(" << currentTime2 <<"(Days:"<< currentTime2 / 1000 / 3600 / 24 << ")" << ") 时间差: " << diffTime2 << " 毫秒" << std::endl; if ( diffTime > 20000 ) { system("pause"); } startTime = currentTime; startTime2 = currentTime2; startTime3 = currentTime3; // 等待5秒 Sleep(5000); } system("pause"); return 0; }
补充需求
- 请明确
timeGetTime()是否不会在运行776天后、数值达到0x9FFFFFF0时重置为0。 - 已知
GetTickCount()可替换为GetTickCount64()避免溢出,但我因定时器分辨率需求必须使用timeGetTime(),想了解如何处理该函数的潜在溢出问题。
内容的提问来源于stack exchange,提问作者이재호
相关产品推荐
相关产品推荐

