- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想描述软件计时器的准确性。我不太关心它有多准确,但确实需要知道准确度是多少。
我研究了 c 函数 clock() 和 WinAPI 的函数 QPC 和 timeGetTime,我知道它们都依赖于硬件。
我正在测量一个可能需要大约 5-10 秒的过程,我的要求很简单:我只需要 0.1 秒的精度(分辨率)。但我确实需要知道最坏情况下的准确度。
虽然更高的准确性是首选,但我宁愿知道准确性很差(500 毫秒)并解释它,也不愿相信准确性更好(1 毫秒)但无法记录它。
有人对如何表征软件时钟精度有什么建议吗?
谢谢
最佳答案
您需要区分准确性、分辨率和延迟。
clock()、GetTickCount 和 timeGetTime() 源自经过校准的硬件时钟。分辨率不是很好,它们由时钟滴答中断驱动,默认情况下每秒滴答 64 次或每 15.625 毫秒滴答一次。您可以使用 timeBeginPeriod() 将其降低到 1.0 毫秒。准确性非常好,时钟是从 NTP 服务器校准的,您通常可以指望它在一个月内不会超过一秒。
QPC 具有更高的分辨率,总是优于 1 微秒,在某些机器上甚至低至半纳秒。然而,它的准确性很差,时钟源是从某处芯片组获取的频率。它未经校准,具有典型的电子公差。仅将其用于短时间间隔。
在处理时序时,延迟是最重要的因素。如果您不能足够快地读取它,那么您就没有用高度准确的定时源。当您在保护模式操作系统上以用户模式运行代码时,这始终是一个问题。它始终具有比您的代码运行优先级更高的代码。特别是设备驱动程序是麻烦制造者,尤其是视频和音频驱动程序。您的代码也可能会被换出 RAM,需要页面错误才能重新加载。在负载很重的机器上,无法在数百毫秒内运行您的代码并不罕见。您需要将这种故障模式考虑到您的设计中。如果您需要保证亚毫秒级精度,那么只有具有实时优先级的内核线程才能满足您的要求。
一个相当不错的计时器是您从 timeSetEvent() 获得的多媒体计时器。它旨在为需要可靠计时器的程序提供良好的服务。你可以让它在 1 毫秒内滴答作响,它会尽可能 catch 延迟。请注意,它是一个异步计时器,回调是在一个单独的工作线程上进行的,因此您必须小心处理适当的线程同步。
关于c++ - 计时器精度 : c clock( ) vs. WinAPI 的 QPC 或 timeGetTime( ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346879/
这个问题在这里已经有了答案: What specifically are wall-clock-time, user-cpu-time, and system-cpu-time in UNIX? (4
我只是尝试使用 jasmine 在 javascript/coffeescript 中进行单元测试,非常好。 我一直在尝试使用 jasmine.Clock.Mock() 来提前并触发 setTimeo
现在使用 emacs org 模式大约一个月来跟踪我所有的项目和任务。 我全天为所有事件计时,而不仅仅是与工作相关的事件。 我的问题是——我经常忘记打卡参加一项新事件(比如吃午饭)。当我返回并打卡回到
我在看 Clock来自java的类,以便我可以将其作为依赖项注入(inject)以获得更好的可测试性。但是我不明白这两种方法的区别systemUTC和 systemDefaultZone . Inst
当我设置特定日期时,我正在努力测试我的端点。 我不想使用 PowerMock 来模拟静态方法,而是决定更改我的服务的实现并使用 LocalDate.now(Clock clock) 实现来更容易地测试
我有一个员工“上类打卡”表,具有开始时间和结束时间属性。每位员工上下类打卡,表格类似这样: Employee_no Start time End time 16
Linux perf工具(前段时间命名为 perf_events)有几个内置的通用软件事件。其中最基本的两个是:task-clock和 cpu_clock (内部称为 PERF_COUNT_SW_CP
我的方法之一中有以下代码 ZonedDateTime current = Instant.now().atZone(ZoneId.of(AMERICA_NEW_YORK)); 我想在 JUnit 测试
我正在使用 sf::Clock 来控制循环。 我想知道是否允许我使用超过 1 个 sf::Clock,如果允许,是否所有“时钟”都将正常运行并按预期工作在所有操作系统上。 例如: sf::Clock
假设您有一个 (1) Intel/AMD x86-64 位 2 GHz 8 核处理器。 8 个内核中的每一个是否都以完整的 2 GHz 运行,或者每个内核是否以完整的 2 GHz 时钟的一部分运行(例
对于 java 8 下面的代码 1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 2. System.o
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有一个相对简单的要求:我希望我在 KVM 下创建的 CentOS 客户机上的时钟从 VM 的第一次启动就与它们的 CentOS 主机同步。 在它们启动并运行后将它们与 NTP 同步很容易。但是,如果
谁能告诉我如何找到STM32F429的APB1时钟频率?以及如何计算STM32F429的波特率。 P.S...请不要告诉我引用引用手册,因为这些工作已经完成,我想告诉我 APB1 时钟频率的确切值 谢
我在 LAN 上有 5 台服务器,没有 Internet 连接。我需要他们保持时钟同步。 我可以将它们配置为 NTP 对等体,并为其中一个的本地时钟设置较高的层数。这样,其他四个就会与该时钟同步。 我
让我们假设我们有许多系统连接在本地网络中并且没有连接到互联网。确保每个时钟同步的最佳方法是什么?它们不一定要与 UTC 时间同步,但在它们之间保持同步就足够了。 我曾想过通过在其中一个系统中设置 NT
我对 clock() 有疑问在运行 32 位版本的 Debian 6.0.3 的机器上。它似乎总是返回 0。使用 this example program 时,我得到以下输出: Calculating
我正在尝试编写一个程序来比较快速排序和插入排序函数所花费的时间,具体取决于数组中元素的数量。这是我想出的代码: #include #include #include //prototypes o
我是一名优秀的程序员,十分优秀!