问题标签 [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.
c# - 控制台应用程序中的可靠计时器
我知道在.NET中有三种计时器类型(请参阅Comparing the Timer Classes in the .NET Framework Class Library)。我选择了一个线程定时器,因为如果主线程很忙,其他类型可能会漂移,我需要它是可靠的。
这个计时器在计时器控制下的工作方式被放在另一个线程上,因此它总是可以在不忙时随着父线程上的工作开始完成而滴答作响。
控制台应用程序中这个计时器的问题是,当计时器在另一个线程上滴答作响时,主线程没有对应用程序关闭做任何事情。
我尝试添加一个while true
循环,但是当计时器关闭时主线程太忙了。
linux - gettimeofday() 是否保证为微秒级分辨率?
我正在将最初为 Win32 API 编写的游戏移植到 Linux(嗯,将 Win32 端口的 OS X 端口移植到 Linux)。
QueryPerformanceCounter
自进程启动以来, 我通过提供 uSeconds 来实现:
再加上QueryPerformanceFrequency()
给出一个常数 1000000 作为频率,在我的机器上运行良好,给了我一个 64 位变量,它包含uSeconds
自程序启动以来的内容。
那么这款便携吗?如果内核以某种方式或类似方式编译,我不想发现它的工作方式不同。但是,我认为它不能移植到 Linux 以外的其他东西上。
sql - 基于定时器的事件触发器
我目前正在从事一个具有特定要求的项目。简要概述如下:
- 从外部网络服务检索数据
- 数据存储在 SQL 2005 中
- 数据通过 Web GUI 进行操作
- 与 Web 服务通信的 Windows 服务与我们的内部 Web UI 没有耦合,除了通过数据库。
- 与 Web 服务的通信既需要基于时间,又需要通过用户对 Web UI 的干预来触发。
Web 服务通信触发的当前(预生产)模型是通过存储手动干预生成的触发请求的数据库表。我真的不想拥有多个触发机制,但希望能够根据调用时间使用触发器填充数据库表。在我看来,有两种方法可以做到这一点。
1) 调整触发器表以存储两个额外的参数。一个是“这是基于时间的还是手动添加的?” 和一个可以为空的字段来存储时间细节(具体格式待定)。如果它是手动创建的触发器,则在触发触发器时将其标记为已处理,但如果它是定时触发器则不标记。
或
2) 创建第二个 Windows 服务,以定时间隔动态创建触发器。
第二个选项对我来说似乎是一个骗局,但选项 1 的管理很容易变成一个编程噩梦(你怎么知道表的最后一次轮询是否返回了需要触发的事件,然后你如何停止它在下一次投票时重新触发)
如果有人能抽出几分钟帮助我决定走哪条路线(这两条路线之一,或者可能是第三条未列出的路线),我将不胜感激。
sharepoint - Sharepoint:从计时器作业执行 stsadm + SHAREPOINT\System 权限
我有一个不寻常的情况,我需要一个 SharePoint 计时器作业来同时拥有本地管理员窗口权限和SHAREPOINT\System
SharePoint 权限。
我可以通过简单地将计时器服务配置为使用本地管理员成员的帐户来获得 Windows 权限。我知道这不是一个好的解决方案,因为它为 SharePoint 计时器服务提供了比它应该拥有的更多权利。但它至少允许我的 SharePoint 计时器作业运行stsadm
。
在本地管理员下运行计时器服务的另一个问题是,此用户不一定具有SHAREPOINT\System
SharePoint 权限,而我也需要此 SharePoint 作业。事实证明,SPSecurity.RunWithElevatedPrivileges
在这种情况下不起作用。Reflector 显示RunWithElevatedPrivileges
检查当前进程是否是owstimer
(运行 SharePoint 作业的服务进程)并且不执行提升是这种情况(我猜这里的原因是计时器服务应该在NT AUTHORITY\NetworkService
具有SHAREPOINT\System
SharePoint的 Windows 帐户下运行权限,因此无需提升计时器作业的权限)。
这里唯一可能的解决方案似乎是在其通常的 NetworkService windows 帐户下运行计时器服务,并通过将管理员凭据存储在某处并通过 StarInfo 的用户名将它们传递给 System.Diagnostics.Process.Run() 以本地管理员身份运行 stsadm 、域和密码。
现在看来一切都应该正常了,但这是我目前遇到的另一个问题。Stsamd 失败并出现以下错误弹出窗口 (!)(Winternals filemon 显示在这种情况下 stsadm 正在管理员下运行):
The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.
事件查看器只注册弹出窗口。
本地管理员用户是我的帐户,当我stsadm
在此帐户下交互运行时,一切正常。当我将计时器服务配置为在此帐户下运行时,它也可以正常工作。
任何建议表示赞赏:)
.net - 从 C# 中的计时器获取准确的刻度
我正在尝试重建一个旧的节拍器应用程序,该应用程序最初是使用 C++ 中的 MFC 编写的,然后使用 C# 在 .NET 中编写。我遇到的问题之一是让计时器足够准确地“滴答”。
例如,假设简单的 BPM(每分钟节拍数)为 120,则计时器应每 0.5 秒(或 500 毫秒)计时一次。但是,将其用作滴答声的基础并不完全准确,因为 .NET 仅保证您的计时器在经过的时间过去之前不会滴答作响。
目前,为了解决上面使用的相同 120 BPM 示例的问题,我将滴答声设置为 100 毫秒,并且仅在每 5 个计时器滴答声时播放点击声音。这确实大大提高了准确性,但感觉有点像黑客。
那么,获得准确刻度的最佳方法是什么?我知道有比 Visual Studio 中现成的 windows 窗体计时器更多的计时器可用,但我对它们并不熟悉。
c# - 对基于计时器的应用程序进行单元测试?
我目前正在用 C# 编写一个简单的、基于计时器的迷你应用程序,它每 k 秒执行一次操作 n 次。
我正在尝试采用测试驱动的开发风格,所以我的目标是对应用程序的所有部分进行单元测试。
所以,我的问题是:有没有一种对基于计时器的类进行单元测试的好方法?
正如我所看到的,问题在于测试执行的时间会非常长,这是一个很大的风险,因为它们必须等待很长时间才能发生所需的操作。
特别是如果想要真实的数据(秒),而不是使用框架允许的最小时间分辨率(1 毫秒?)。
我正在为动作使用模拟对象,以记录动作被调用的次数,这样动作几乎不需要时间。
c# - DateTime.Now 是衡量函数性能的最佳方法吗?
我需要找到一个瓶颈,并且需要尽可能准确地测量时间。
以下代码片段是衡量性能的最佳方法吗?
c# - System.Threading.Timer 的可扩展性如何?
我正在编写一个需要使用Timer
s 的应用程序,但可能很多。课程的可扩展性如何System.Threading.Timer
?文档只是说它是“轻量级的”,但没有进一步解释。这些计时器是否被吸入代表 a 处理所有回调的单个线程(或非常小的线程池)中Timer
,还是每个Timer
都有自己的线程?
我想另一种表述问题的方式是:如何System.Threading.Timer
实施?
java - 可重置的 Java 计时器
我想在 java.utils.Timer 中有一个可重置时间的 java.utils.Timer。我需要设置一个在 X 秒内发生的一次性事件。如果在创建计时器和 X 秒之间没有发生任何事情,则事件正常发生。
但是,如果在 X 秒过去之前,我决定事件应该在 Y 秒之后发生,那么我希望能够告诉计时器重置其时间,以便事件在 Y 秒内发生。例如,计时器应该能够执行以下操作:
我看不到使用 utils 计时器来执行此操作的方法,就好像您调用 cancel() 您无法再次安排它一样。
我接近复制此行为的唯一方法是使用 javax.swing.Timer 并涉及停止原始计时器并创建一个新计时器。IE:
有没有更简单的方法??
c++ - 翻转安全计时器(滴答)比较
我有一个硬件计数器,我可以观察到时间考虑。它以毫秒为单位,以 16 位无符号值存储。如何安全地检查计时器值是否已经过了一定时间并安全地处理不可避免的翻转:
当 ms_timer 溢出为 0 时,此代码将失败。