![]() |
1
15
对于时间,
current Microsoft recommendation
是使用
这将给你比毫秒更好的时间。如果系统不支持高分辨率计时器,则默认为毫秒(与
Here is a short Microsoft article with examples of why you should use it :) |
![]() |
2
5
我最近有这个问题,做了一些研究。好消息是,所有三个主要操作系统都提供某种高分辨率计时器。坏消息是,它是每个系统上不同的API调用。对于POSIX操作系统,您需要使用clock gettime()。但是,如果您使用的是Mac OS X,这是不受支持的,您必须使用mach_get_time()。对于Windows,请使用QueryPerformanceCounter。或者,对于支持OpenMP的编译器,您可以使用omp_get_wtime(),但它可能无法提供您所需的分辨率。 我还发现fftw.org(www.fftw.org/cycle.h)中的cycle.h很有用。 下面是一些在每个操作系统上调用计时器的代码,使用一些难看的ifdef语句。使用非常简单:timer t;t.tic();someoperation();t.toc(“message”);它将以秒为单位打印所用时间。
|
![]() |
3
4
如果你只是担心
如果要从多个线程调用此函数,则需要锁定对
|
![]() |
4
4
GetSystemTimeAsFileTime 是最快的资源。它的粒度可以得到 打电话到 GetSystemTimeAdjustment 哪些填充 LPTIME增量 . 作为文件时间的系统时间有100ns单位,增量为 时间增量 . 时间增量 可以改变,这取决于多媒体计时器接口的设置。
对…的呼唤
timeGetDevCaps
将披露时间服务的能力。它返回
一个值
沃尔明
对于支持的最小中断周期。对…的呼唤
timeBeginPeriod
具有
沃尔明
as参数将设置系统以尽可能高的中断频率(通常为~1毫秒)运行。本遗嘱
也
强制返回系统文件时间的时间增量
为了你的目的,我建议采用这种方法。 这个 QueryPerformanceCounter 选择是有问题的,因为它的频率不是 用两种方法精确:首先,它偏离 QueryPerformanceFrequency 通过硬件特定的偏移。这个偏移可以很容易地 几百ppm,这意味着转换成时间将包含每秒几百微秒的误差。其次是热漂移。这种装置的漂移很容易达到几ppm。这样,另一个-热依赖-错误 添加了几个US/S。
只要~1毫秒的分辨率足够,主要问题是开销,
当微秒很重要时,你必须走更长的路才能看到更多的细节。亚毫秒时间服务在 Windows Timestamp Project |
![]() |
5
1
我建议你使用 GetSystemTimeAsFileTime 如果您是专门针对Windows的,则使用API。通常比 GetSystemTime 并且具有相同的精度(大约10-15毫秒-不要看分辨率);几年前我在WindowsXP下做基准测试时,速度大约是50-100倍。 唯一的缺点是,您可能必须使用例如 FileTimeToSystemTime 如果您需要以更人性化的格式访问返回的时间。另一方面,只要您不需要实时转换这些时间,就可以离线或以“懒惰”的方式进行转换(例如,只转换需要显示/处理的时间戳,并且仅在您实际需要时转换)。 QueryPerformanceCounter 正如其他人提到的,这可能是一个不错的选择,但是开销可能很大,这取决于底层的硬件支持。在我的基准测试中,我提到上面的queryperformanceCounter调用比对getSystemTimeasFileTime的调用慢25-200倍。此外,还有一些可靠性问题,如报告的 here . 所以,总之:如果您能够处理10-15毫秒的精度,我建议您使用getSystemTimeasFileTime。如果你需要比这更好的东西,我会去查询性能计数器。 小免责声明:我没有在比xp sp3更高版本的Windows下执行任何基准测试。我建议你自己做一些基准测试。 |
![]() |
6
0
在Linux上,您可以获得微秒:
在Windows上,只有millseconds可用:
这来自 R 的datetime.c(为了简洁而被编辑)。 当然还有 Boost's Date_Time 在某些系统上具有纳秒级分辨率(细节 here 和 here ) |
![]() |
7
0
如果您的目标是一个足够晚的操作系统版本,那么您可以使用
|
![]() |
8
0
你看过这篇文章中的代码了吗? http://msdn.microsoft.com/en-us/magazine/cc163996.aspx 我使用VC2005和C++Builder XE在Windows 7 64位机上编译此代码,但在执行时,它锁定了我的机器;还没有进行足够的调试来找出原因。这似乎太复杂了。UG模板模板模板… |
![]() |
9
0
在Mac OS X上,您可以简单地使用uint32 tickcount(void)来获取刻度。 |
![]() |
10
0
POSIX支持
clock_gettime()
其中使用
更新(2016-09-20):
手册页
|
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |