问题标签 [time-precision]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
99 浏览

java - 极其精确的重复/连续代码执行

在我的公司,我有一个程序必须通过 UDP 将一些数据发送到不受我们控制的远程系统。

数据必须每 7981859ns (=7.98 毫秒) +/- 0.001ms 发送一次。

可悲的是,如果我们传输数据太晚,旧版本的远程系统就会崩溃,如果我们传输太快/太早(实时数据生成),我们这边的数据就会用完。

目前,我们正在通过

如果我添加一些日志记录,我可以看到数据在 6ms - 11ms 之间发送,这对我们来说范围太大了。

我现在想知道如何优化它。

是否可以使用上次传输的纳米时间戳设置变量(如何获得?我只知道System.currentTimeMillis()),更快地执行循环(或只是在循环中while(true)),然后等到“currentNanoTime - lastNanoTime > 7981859 “在做之前send(..)

我的问题是我没有找到等待纳秒的方法,只有几毫秒。

0 投票
2 回答
1343 浏览

c# - .NET 中最精确的计时器是什么?

我想使用一个计时器,它允许我以特定的时间间隔运行特定的代码,但 Winforms 计时器非常不准确。我将它设置为 2 秒,但它会关闭多达 48 秒。我正在运行的代码类型高度依赖于尽快采取行动,因此 48 秒对做任何事情都为时已晚。

此外,我不希望计时器占用大量 CPU 周期,因为我正在运行的代码非常简单。

0 投票
1 回答
12423 浏览

c# - c# 和 SQL Server 中的 DateTimeOffset 分辨率

文档指出,在 .NET 和 SQL 服务器中,分辨率都是 100ns。

DateTimeOffset 值的时间分量以 100 纳秒为单位测量,称为刻度- C# 精度 - 100 纳秒- SQL Server

但是 SQL 似乎删除了最后一位(例如,我试图保存 2013-08-15 09:19:07.2459675 -04:00,而 SQL 保存 2013-08-15 09:19:07.2459670 -04:00 - 注意最后一位数字发生变化。)

这发生在同一台机器上,因此它不依赖于硬件。

并不是说我真的需要这个解决方案,但它使比较日期变得更加困难……我只是好奇。

0 投票
1 回答
2016 浏览

linux - PostgreSQL:CURRENT_TIMESTAMP 和 CLOCK_TIMESTAMP 分辨率:Windows 还是 Linux?

所以我对 PostgreSQL 计时函数有一个有趣的问题。

这是情况。我们有一个预生产服务器 (Linux),用于存放我们正在开发的应用程序。我还在该数据库(Windows)的本地副本上做一些工作,以防服务器正在进行一些更重要的工作。我最近遇到了一个问题,我开始在本地数据库副本的日志表上发现主键违规。我认为这是不可能的,因为我使用 CLOCK_TIMESTAMP(当前系统时间)作为主键。此外,我在 pre-prod 服务器上进行了测试,它运行良好。所以我做了一些调查。我最终发现,如果我在服务器上运行“SELECT CLOCK_TIMESTAMP()”,它会将时间返回到微秒。如果我在本地主机上运行它,它只会下降到毫秒。因此,当在计时器到达下一毫秒之前发生多个更新时,就会出现问题,

所以我的问题是这个。为什么会发生这种情况,我该如何解决?这是我还没有找到的一些晦涩的设置吗?还是 Windows 与 Linux 的计时器分辨率不同?

编辑:CURRENT_TIMESTAMP、NOW() 和所有其他返回时间戳的内置函数也会发生同样的事情。

谢谢

0 投票
0 回答
217 浏览

linux - 以可移植方式访问 struct stat 的亚秒级时间戳值

( stat2) 手册解决了对时间戳字段的纳秒分辨率的支持,但在旨在可移植的程序中测试它们的存在或它们的名称看起来并不简单:多达四个功能测试宏名称 ( _BSD_SOURCE, _SVID_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE) 被提及。看起来手册建议如下:

  1. 它没有提到任何既没有st_atim.tv_nsec也没有st_atimensec的可能性。这两个名称之一是否保证存在?
  2. 它说纳秒字段返回值为 0,但这与实际值 0 无法区分。如何测试是否真的支持亚秒级时间戳?
0 投票
2 回答
2273 浏览

java - Java ScheduledExecutorService 精度差

您好,我编写了一个简单的程序来测试 ScduledExecutorService.schedule() 函数的精度。

测试设置延迟并检查所需延迟和有效结果之间的有效距离。

测试在运行 Linux 3.8 x86_64 的 i7 机器上执行,同时使用 OpenJDK 1.7 和 Oracle JDK 1.7

测试的结果真的很糟糕,这里有一个列表可以显示假定延迟和有效延迟之间的平均增量:


传奇:

  • Sleep(ms):所需的延迟时间(以毫秒为单位)
  • deltaAVG(ms):所需延迟和有效延迟之间的平均差异,以毫秒为单位
  • deltaAVG_PERC:所需/有效的错误百分比
  • delta MIN/MAX:获得的所需延迟和有效延迟之间的最小/最大差异

如您所见,称为 deltaAVG 的平均误差相对于延迟增加。

如何在延迟中获得更好的结果?我的意思是 i7 机器上 10 微秒的 300% 错误率太多了。

这是我用于测试的代码:

0 投票
1 回答
2248 浏览

sql - DBMS 中的小数秒精度

我想知道是什么Fractional Second Precision,有一些例子。
以及不同的 DBMS 如何支持它?

0 投票
2 回答
946 浏览

c++ - Qt中屏幕绘制和键盘按键事件的确切延迟

我正在做一个 Qt 项目,其中某些事件发生的确切时间是最重要的。具体来说:我有一个非常简单的动画,必须在特定时间绘制到屏幕上,比如 t1。一旦我发布QWidget更新以启动动画,将需要一小段时间 dt(取决于屏幕刷新率等)才能在屏幕上实际显示更新。我需要测量这个额外的时间 dt。我不确定该怎么做。

我曾想过在 the paint 事件中使用QTime和object,但我不确定这是否能实现我的目标。QElapsedTimerQWidget

同样,当用户按下一个键时,它将根据键盘的轮询率在一个小的延迟后注册。我还需要考虑这种延迟。如果我能得到投票率,我知道平均会有多少延迟。

0 投票
0 回答
193 浏览

c++ - 带有线程和锁在c ++中以微秒为单位的低精度计时器回调

我写了一个运行速度不够快的 timercallback 类。

但是,当设置 timercallback 的时间以每 1ms 调用一次函数时,不要调用并花费更多时间,例如 10 ms。我需要帮助改进代码以在 1 毫秒内调用回调函数(此计时器的事件函数)并在一个带锁的线程中运行。我怎样才能做到这一点?使用此类的示例:

0 投票
2 回答
5152 浏览

c - 将 time_t 设置为毫秒

我有一个函数,我希望该函数在运行一定毫秒后停止运行。这个函数可以工作几秒钟,但我想测试几毫秒。我该怎么做呢?如果我设置消除 = 1,它对应于 1 秒。如何设置消除 = 5 毫秒?

功能: