问题标签 [timer]

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 投票
2 回答
4274 浏览

linux - Linux 是否为应用程序提供单调递增的时钟

Linux/Unix/Posix 是否为用户空间应用程序提供 API 以访问单调递增的时钟,精度为厘秒到毫秒?

在 Linux 上,/proc/uptime 提供基于字符串的浮点数表示系统已启动的秒数。

gettimeofday(2) 不提供单调递增的时钟。

我可以在 ITIMER_REAL 时域中使用 getitimer(2),将计时器设置为在(取决于平台的)最大值开始并忽略生成的信号,但根据手册页,计时器可以运行的最长时间约为 100 天,其中比我预期的运行时间短。

0 投票
1 回答
6566 浏览

windows - Windows 是否为应用程序提供单调递增的时钟

这个问题的灵感来自Linux 是否为应用程序提供了单调递增的时钟

也许我应该更准确一点:我正在寻找一个严格增加的时钟函数,因此永远不会返回相同的值,这与两个调用彼此跟随的速度无关。

0 投票
9 回答
789 浏览

embedded - 精确计时函数调用

我正在使用带有 C51 内核的微控制器。我有一个相当耗时且大型的子程序,需要每 500 毫秒调用一次。未使用 RTOS。

我现在这样做的方式是我有一个 10 毫秒的现有定时器中断。我在主程序循环中检查是否为真的每 50 个中断后设置一个标志。如果标志为真,则调用子例程。问题是,当程序循环来服务标志时,它已经超过 500 毫秒,在某些代码路径的情况下有时甚至超过 515 毫秒。所花费的时间无法准确预测。

显然,由于执行时间过长,子程序不能从定时器中断内部调用。子程序需要 50ms 到 89ms,具体取决于各种条件。

有没有办法确保每次在 500 毫秒内准确调用子程序?

0 投票
1 回答
1852 浏览

c - timerfd_create 在 amd64 上使用 debian linux 测试

我正在尝试在 Debian Linux lenny 下使用 timerfd_create 和 timerfd_settime。手册页说包括<sys/timerfd.h>. 此文件无法在我的系统上找到。根据 Debian 包搜索,唯一带有 timerfd.h 的包是 linux-headers-* 包。

我已经安装了包 linux-headers-2.6.26-1-amd64 和 linux-headers-2.6.26-1-common。我尝试包括 /lib/modules/2.6.26-1-amd64/build/include/linux/timerfd.h 文件(不包括<sys/timerfd.h>)。但后来我得到以下链接器错误:
slave.c:(.text+0x166): undefined reference to timerfd_ceate
slave.c:(.text+0x1e5): undefined reference totimerfd_settime

我的构建命令是 gcc -o slave slave.c -L../libs -lcan -lutils -lrt

can 和 utils 库是我自己的。他们都不使用或定义 timerfd_* 函数之一。我尝试了 -lrt 因为 timer_create 和 timer_settimer 需要它,即使它不在手册页中。带有 timer_create 和 timer_settimer 的测试程序可以正常工作并且符合预期。

我需要安装哪些数据包,需要链接到哪些库,以及使用 timerfd_create 和 timerfd_settimer 需要哪些包含文件。

谢谢埃格

0 投票
6 回答
55004 浏览

java - 如何在 Java 中计算事件的经过时间?

什么是使用 Java 访问系统时钟的简单/简便方法,以便我可以计算事件的经过时间?

0 投票
3 回答
1638 浏览

.net - 使用 System.Timers.Timer 时非常奇怪的错误

出于某种奇怪的原因,Elapsed 事件触发了两次,它肯定应该触发一次。紧接着,计时器停止工作......代码结构有点像这样:当某个对象包含的某个值(以 500-1500 毫秒的间隔不断更新)增加超过 X 时,它被定义为触发某个事件与前一个值相比较的总和。

例如,如果我将 X 定义为 2,并且我收到的值是 1、2、1、2、3、4、8,那么当输入 8 时,该事件将触发。该事件的事件处理程序启动上述计时器,该计时器在它过去之前运行 Y 时间并触发有问题的事件。如果在计时器结束之前该值恢复正常,则重置计时器。

因此,总体结果应该是一个测量某个动态值的应用程序,并监视它是否存在超过 Y 秒时间发生的大 X 大小异常。

代码中的整体结果看起来像

实际的问题是 RaiseAlert 在计时器经过时被触发两次,然后就好像计时器完全停止工作,不再触发。我认为值得一提的是,整个应用程序包含大量线程活动,一次至少运行 2 个线程,更新 vMonitor 值。

有什么想法吗?

更新:

关于线程问题,解释确切的结构相当复杂,但我可以说 vMonitor 对象包含在另一个对象中,该对象包含更新值,该值由各个线程不断更改,当然是受监视的. 每当父对象的值更新时,它与 vMonitor 进行比较,并触发适当的事件。vMonitor 中的值随后被父对象值替换。

编辑:我刚刚再次验证了它, vTimer.Elapsed 委托仅包含一个正确的事件处理程序。

0 投票
12 回答
39457 浏览

c - linux下1ms分辨率定时器推荐方式

我需要一个在 linux 下分辨率为 1ms 的计时器。它用于增加一个计时器值,该值又用于查看是否应该触发各种事件。由于 glibc 的要求,POSIX timerfd_create 不是一个选项。我尝试了 timer_create 和 timer_settimer,但我从中得到的最好的结果是 10 毫秒的分辨率,较小的值似乎默认为 10 毫秒的分辨率。根据手册页,Getittimer 和 setitimer 的分辨率为 10 毫秒。

我目前能想到的执行此计时器的唯一方法是在我的主循环中使用 clock_gettime 和 CLOCK_MONOTONIC 来测试是否经过了毫秒,如果是则增加计数器(然后检查各种事件是否应该触发)。

有没有比在主循环中不断查询更好的方法呢?推荐的解决方案是什么?

我使用的语言是普通的 c

更新
我使用的是 2.6.26 内核。我知道你可以让它以 1kHz 的频率中断,然后可以将 POSIX timer_* 函数编程为最高 1ms,但这似乎不可靠,我不想使用它,因为它可能需要一些新内核系统。一些股票内核似乎仍然配置了 100Hz。我需要检测到这一点。该应用程序可能在我的系统之外的其他东西上运行:)

我无法入睡 1 毫秒,因为我可能需要对网络事件做出反应。

我是如何解决 的 因为它不是那么重要,所以我简单地声明全局计时器的分辨率为 100 毫秒。所有使用自己的计时器的事件都必须设置至少 100 毫秒的计时器到期时间。我或多或少想知道是否会有更好的方法,因此提出了这个问题。

为什么我接受这个答案 我认为来自 freespace 的答案最好地描述了为什么没有实时 Linux 系统是不可能的。

0 投票
2 回答
538 浏览

multithreading - 判断“elapsed”事件线程是否仍在运行?

给定一个 System.Timers.Timer,有没有办法从主线程判断运行经过的事件代码的工作线程是否仍在运行?

换句话说,在停止计时器或计时器正在运行的主应用程序/服务线程之前,如何确保工作线程中运行的代码当前没有运行?

这是放弃使用状态的线程定时器的问题,还是直接使用线程的时间?

0 投票
6 回答
198661 浏览

c# - 在 Windows 服务中使用的最佳计时器

我需要创建一些 Windows 服务,它将每 N 段时间执行一次。
问题是:
我应该使用哪个计时器控件:System.Timers.Timer还是System.Threading.Timer一个?它对某事有影响吗?

我之所以问,是因为我听到了许多证据表明System.Timers.TimerWindows 服务中的工作不正确。
谢谢你。

0 投票
1 回答
1388 浏览

iphone - 定时器和动画事件胜过 TouchesEnded 事件

我已经使用我首先在 TouchesBegan 重载中设置的 NSTimer 实现了一个长按处理程序。

但是,我真正想要的是在按住触摸的同时连续快速执行一个动作。因此,在计时器到期时,我调用一个处理程序来完成这项工作,然后它设置另一个计时器并继续循环,直到 TouchesEnded 进入并取消它,或者满足另一个终止条件。

这工作正常,直到我的处理程序代码触发动画同时消失。现在我们有了动画事件和计时器事件,我们还需要处理 TouchesEnded。

我发现,如果触发了动画,并且我将计时器设置为小于 0.025 秒,我的 TouchesEnded 事件直到计时器周期停止(另一个终止条件)才会发生。设置一个较慢的计时器,或者不触发动画,让它工作(TouchedEnded 立即出现),但不是我想要的。

显然,这一切都在设备上(发布版本 - 没有 NSLogs) - 在 sim 中一切正常

有没有办法设置这些事件的相对优先级 - 或者我可能在这里遗漏了其他明显的东西?

在这种情况下,我通过在没有视觉反馈的情况下完成连续部分来解决这个问题(从这个用户的角度来看是即时的)。我认为目前还可以。我仍然希望听到更多关于此的想法(Jeffrey 的想法很好),但我现在不会坐立不安。