使 c# 尽可能准确(也许使用 hacs)?

making c# accurtate as posible (maybe with hacs)?

据我所知,众所周知,当时间很关键时,c# 不能准确。我当然能理解这一点,但希望有已知的游戏技巧可以帮助解决我的问题。

技术:

我正在使用 API 用于通过控制传输发送数据的 USB。在 API 中,当发生中断传输时(每 8 毫秒一个),我会收到一个事件。然后我只是在那个确切的时间触发我的控制转移。我注意到(但不经常)是触发时间超过 8 毫秒。大多数情况下,它会及时进行(中断事件发生后 < 1 毫秒)。问题是控制传输不能与中断传输同时发生,因此控制传输必须在中断传输的 5ms 内完成,这样它才能完成并可以发生中断传输。

除此之外,我的问题是让一个事件在另一个事件发生后 < 5 毫秒内触发。我希望有一个解决方案,因为游戏也会受到这种事情的影响。例如,某些游戏可以置于高优先级模式。我想知道这是否可以用代码完成?我也可以尝试使用分析器来支持我的怀疑,它可能是我可以关闭的东西。

对于那些想要走技术路线的人来说,api 是 https://github.com/signal11/hidapi

如果有人有可行的技巧或想法,以下是我的一些注意事项。

1) USB 中断轮询每 8 毫秒发生一次,只有几百 us 长

2) 控制传输应该每 8-32 毫秒发生一次(越快越好)

3) 此控制传输最多可能需要 5 毫秒才能完成

4) 控制器传输可以跳过振荡

5) 这是 USB 1.1

这甚至不是 C# 问题,您处于多任务非实时 OS,因此您不知道您的程序何时会被激活,OS 可以优先处理其他任务。

说了,你可以提高程序线程的优先级,但我怀疑它是否能解决任何问题:

System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Highest;

当必须满足此类限制性时序时,您必须在内核级别工作,例如作为驱动程序。