gpt4 book ai didi

c# - 每 0.1 毫秒和 0.3 毫秒重复两个任务(Systems.Timer.Timer 不够精确)

转载 作者:行者123 更新时间:2023-11-30 12:12:15 27 4
gpt4 key购买 nike

  1. 有没有办法在 C# 中以高分辨率频率执行方法,例如每 100 微秒?

  2. 两种不同频率的方法怎么样?方法 1 每 0.1 毫秒和方法 2 0.3 毫秒?

MSDN 有关于将事件处理程序附加到 Systems.Timers.Timer 类的文档,如下所示:

public static void Main()
{

System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(Method);
aTimer.Interval = 2000;
aTimer.Enabled = true;
GC.KeepAlive(aTimer);
}

但是 System.Timers.Timer 在我对其进行基准测试时只有 15~16 毫秒的精度。我的 CPU 性能计数器的精度为 0.1 毫秒及以下,但我找不到将事件处理程序附加到 Stopwatch 类的方法。

此外,当我以不同的频率执行这两种方法时,是否存在一些我需要注意的线程问题?

谢谢!

最佳答案

它很难看,但您可能有机会使用秒表 ElapsedTicks。

Stopwatch w = new Stopwatch()
long nextTick = 0;
long ticksPerMicroSecond = 1000000L / Stopwatch.Frequency; // Number of ticks per microsec.
long periodInTicks = ticksPerMicroSecond / 100; // Ticks per 0.1ms

while(true)
{
long currentTick = w.ElapsedTicks.
if (currentTick > nextTick)
{
nextTick = currentTick + periodInTicks;
// Do something here.
}
}

它尽可能丑陋,你会得到一个 while(true) 循环,它可能会免费使用 100% cpu(那么最好在多核上运行它)。

您可能需要对这个东西进行一些基准测试(查看 Stopwatch.Frequency msdn 文档中的示例),看看您的计时器有多精确,并看看您因内部函数迟到而产生的漂移。您可能还想启用后台 gc 以避免 GC 阻塞您的线程。虽然这表明它在代码中是可行的,但我真的不确定您能否在不到 0.1 毫秒的时间内运行您的函数。

关于c# - 每 0.1 毫秒和 0.3 毫秒重复两个任务(Systems.Timer.Timer 不够精确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13965470/

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