gpt4 book ai didi

.net - 需要事件以在计时器事件上执行,节拍器精度

转载 作者:行者123 更新时间:2023-12-03 13:22:26 25 4
gpt4 key购买 nike

我设置了一个计时器来调用应用程序中的事件。问题是其他Windows操作偏向于事件执行。前任。打开并打开窗口,加载网页。我需要该事件每次精确地按时执行。

当我第一次设置该应用程序时,使用一个声音文件(如节拍器)来聆听均匀的声音,在稳定的状态下,它会立即发出声音,但在Windows环境中执行某些操作时,声音的发出速度会变慢,然后进行排序加快了步伐 catch 。

因此,我向事件添加了日志记录方法,以使计时器滴答作响。从这些数据来看,计时器似乎不受Windows应用程序的影响,但是我的应用程序事件调用受到了影响。我通过检查事件中的datetime.now来解决这个问题,如果我将其设置为250毫秒,即每秒4次点击。您将获得如下所示的数据。

(秒):(毫秒)

1:000
1:250
1:500
1:750

2:000
2:250
2:500
2:750

3:000
3:250
3:500
3:750

(让我执行一些Windows事件)(时间会偏斜)

4:122
4:388
4:600
4:876

(停止做我在Windows中所做的事情)
(为了简化数据,我的列表长30秒)

5:124
5:268
5:500
5:750

(您会发现时间回溯到开始时的毫秒数)

6:000
6:250
6:500
6:750

7:000
7:250
7:500
7:750

因此,我认为计时器每次都将继续在同一毫秒内触发,但是其他Windows操作正偏向于触发该事件。
它不是很大的歪斜,但是对于我需要完成的事情,它是 Not Acceptable 。

我可以在.NET中做些什么,希望使用XAML/WPF应用程序,那可以纠正事件的偏斜吗?

谢谢。

最佳答案

如果可能的话,正确地做到这一点可能非常非常棘手。某些音频处理应用程序确实很难做到这一点。对于这种实时操作,标准计算机设置不是完全正确的,因为您无法控制在后台运行多少个线程/进程。

但是,作为第一次尝试,您可以使用循环而不是异步触发器。请注意,这可能会增加CPU的负担,但仍不能保证精确的计时。伪代码:

forever
{
// This will bring your precision down to the level of thread
// timing precision
Sleep(0);

LastTime = GetPerformanceTimer();
if(LastTime > NextInterval)
{
// Play sound, update last time
}
}

其中 GetPerformanceTimer是某种基于 QueryPerformanceCounter的方法。我曾经用 http://www.emphess.net/2009/03/04/a-very-simple-profiler/编写了一个非常简单的事件探查器,但是其中的代码非常简单,从计时器启动以来,从根本上讲,它以秒为单位提供了非常高的时间。

您可能还想给您的进程更高的优先级,这样其他进程就不会停止您的进程。

关于.net - 需要事件以在计时器事件上执行,节拍器精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com