当前位置: 首页 > 编程语言 > C#

C#TimerwithMillisecondWait分享

时间:2023-04-10 22:15:11 C#

C#TimerwithMillisecondWait每n*x毫秒我执行一个动作,其中n=0,1,2,...;x是一些增量。示例-每25毫秒执行一次计算。对于每个增量,此操作可能需要不到x秒。所以我需要C#中的一个方法来等待剩余的(x-actual_time)毫秒。示例-如果计算只需要20毫秒,我需要再等5毫秒才能重新运行计算。请指教。谢谢,Kevin我需要C#中的一个方法来等待剩余的(x-actual_time)毫秒。我认为它是在Windows上运行的C#。还有你的问题。Windows不是“实时”操作系统。如果你需要毫秒级的计时精度,你能做的最好的事情就是将线程的线程优先级设置得非常高,然后在查询高性能计时器(秒表)时忙等待。你不能屈服于另一个线程;在OS上下文切换之前,另一个线程最多可以运行16毫秒,当然,除非你是最高优先级的线程,否则你无法保证控制权会在16毫秒后返回给你。现在,将线程优先级设置为高然后忙于等待是您可能做的最粗鲁的事情之一;基本上你将控制用户的机器并且不允许他们用它做任何其他事情。所以我要做的就是完全放弃这个动作。或者,(1)考虑获得专为实时过程控制设计的操作系统(如果这实际上是您的应用程序),而不是专为多任务业务应用程序设计的多任务操作系统。或者(2)中止要求操作恰好每25毫秒发生一次。只需执行一次计算,并将其余的量程输出到另一个线程。当你获得控制权时,看看你屈服后是否超过25毫秒;如果没有,再次屈服。如果是这样,请重新开始并执行计算。在Windows这样的非实时操作系统中,很难达到这种精度。您最好的选择可能是调查多媒体计时器。其他.NET计时器不会有您需要的那种解决方案。在25毫秒,您可能处于.Net中可用的计时器分辨率的错误一侧。但是-作为一般解决方案,我可能会尝试这种“进行计算......等到25毫秒过去”的方法。更好的方法可能是在25毫秒触发器上使用System.Timers.Timer来触发计算。变种定时器=新定时器(25);timer.Elapsed+=(sender,eventArgs)=>{DoCalc();};定时器。开始();在上面的示例中,DoCalc方法将每25毫秒调用一次(尽管存在计时器分辨率问题)。如果您的计算超出了规定的时间,您需要考虑该怎么做。按照目前的情况,上面的代码将允许第二次计算开始,即使之前的计算尚未完成。正如EricLippert和MattBurland指出的那样,这是一个艰难的选择,而且您的选择相当有限。基本上,你也可以。在示例用例中,后一种解决方案统计上会为您提供一个40Hz的计时器,但由于您使用的计时器分辨率较低,您会出现明显的抖动。这是权衡,这是您的要求。这是我写的一个高精度定时器。我以25毫秒的间隔得到大约<1毫秒的平均精度。但如果Windows很忙,它可能会迟到。它相当依赖于CPU利用率。随意使用它。当下一个滴答时间超过15毫秒时,它使用Sleep(1),然后使用SpinUntil(根据需要产生)来维持CPU使用率。使用.NET4功能。链接:高精度定时器以上就是C#学习教程:C#定时器等待毫秒分享的全部内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处: