首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时同步定时器

实时同步定时器
EN

Stack Overflow用户
提问于 2020-07-11 11:03:29
回答 1查看 715关注 0票数 1

我正试图用一个17ms来刷新我的帧--每一个timer

代码语言:javascript
复制
Timer timer = new Timer(17);
timer.Elapsed += ResetFrame;
timer.Start();

但是,它不是等待17ms然后重复,而是等待帧刷新完成,然后等待17ms等待下一个重复。这将导致每个28ms刷新框架。如何与实时同步?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-11 12:14:44

要使实时计时器具有很短的间隔,您可以查看本文:

C#中的实时定时器

在点网中,跟踪计时器不是实时的。 System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer意味着如果您想每100毫秒运行一次代码,那么在计时器上触发,甚至在110毫秒或更高的时间内运行。Windows不是实时操作系统,因为这个.Net也不是实时的。 要在C#中创建一个实时计时器,您必须编写能够保存CPU的自定义代码,以便在正确的时间运行您的代码。

代码语言:javascript
复制
class Program
{
   static void Main(string[] args)
  {
    Console.ReadLine();
    Console.WriteLine("Running");
    RealTimeTimerTest obj = new RealTimeTimerTest();
 
    obj.Run();
  }
}
 
public class RealTimeTimerTest
{
   List<DateTime> lst = new List<DateTime>();
  System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
 
  public void Run()
  {
    int Tick = 100;
    int Sleep = Tick - 20;
    long OldElapsedMilliseconds = 0;
    sw.Start();

    while (sw.IsRunning)
    {
      long ElapsedMilliseconds = sw.ElapsedMilliseconds;
      long mod = (ElapsedMilliseconds % Tick);

      if (OldElapsedMilliseconds != ElapsedMilliseconds && (mod == 0 || ElapsedMilliseconds > Tick))
      {

        //-----------------Do here whatever you want to do--------------Start
        lst.Add(DateTime.Now);
        //-----------------Do here whatever you want to do--------------End

        //-----------------Restart----------------Start
        OldElapsedMilliseconds = ElapsedMilliseconds;
        OldElapsedMilliseconds = 0;
        sw.Reset();
        sw.Start();
 
        System.Threading.Thread.Sleep(Sleep); 
         //-----------------Restart----------------End
      }
       
      //------------Must define some condition to break the loop here-----------Start

      if (lst.Count > 500)
      {
        Write();
        break;
      }
      //-------------Must define some condition to break the loop here-----------End
    }
  }

 
  private void Write()
  {
    System.IO.StreamWriter sw = new System.IO.StreamWriter("d:\\text.txt", true);
    foreach (DateTime dtStart in lst)
      sw.WriteLine(dtStart.ToString("HH:mm:ss.ffffff"));    sw.Close();
  }
}

还指出:

.NET中最精确的计时器?

高分辨率定时器

C#中的高分辨率定时器

微秒和毫秒C#定时器

Precision-Repeat-Action-On-Interval-Async-Method

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62848329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档