【发布时间】:2026-01-15 00:05:01
【问题描述】:
C/C++ 程序员可以使用的最快的计时系统是什么?
例如:
time() 将给出自 1970 年 1 月 1 日 00:00 以来的秒数。
Windows 上的 GetTickCount() 将给出自系统启动以来的时间(以毫秒为单位),但仅限于 49.7 天(之后它会简单地回零)。
我想获取当前时间,或自系统/应用启动时间以来的滴答声,以毫秒为单位。
最大的担忧是方法的开销 - 我需要最轻的一个,因为我将每秒多次调用它。
我的情况是我有一个工作线程,我向该工作线程发布待处理的作业。每个作业都有一个“执行时间”。所以,我不在乎时间是当前的“真实”时间还是系统正常运行以来的时间——它必须是线性的和轻量级的。
编辑:
unsigned __int64 GetTickCountEx()
{
static DWORD dwWraps = 0;
static DWORD dwLast = 0;
DWORD dwCurrent = 0;
timeMutex.lock();
dwCurrent = GetTickCount();
if(dwLast > dwCurrent)
dwWraps++;
dwLast = dwCurrent;
unsigned __int64 timeResult = ((unsigned __int64)0xFFFFFFFF * dwWraps) + dwCurrent;
timeMutex.unlock();
return timeResult;
}
【问题讨论】:
-
您是否预计在正常运行时间 > 49.7 天的系统上运行此程序?
-
您是在专门询问 Windows 吗? Posix 平台有
gettimeofday(),可以以微秒级精度覆盖数十年。 -
抱歉不清楚 - 是的,我问的是 Windows。
-
哇,winfroze!是你自己想出来的吗?
-
是的,我做到了,但我从总部位于华盛顿州的一家软件公司获得了很多灵感。