我正试图用一个17ms来刷新我的帧--每一个timer。
Timer timer = new Timer(17);
timer.Elapsed += ResetFrame;
timer.Start();但是,它不是等待17ms然后重复,而是等待帧刷新完成,然后等待17ms等待下一个重复。这将导致每个28ms刷新框架。如何与实时同步?
发布于 2020-07-11 12:14:44
要使实时计时器具有很短的间隔,您可以查看本文:
C#中的实时定时器
在点网中,跟踪计时器不是实时的。
System.Windows.Forms.TimerSystem.Timers.TimerSystem.Threading.Timer意味着如果您想每100毫秒运行一次代码,那么在计时器上触发,甚至在110毫秒或更高的时间内运行。Windows不是实时操作系统,因为这个.Net也不是实时的。 要在C#中创建一个实时计时器,您必须编写能够保存CPU的自定义代码,以便在正确的时间运行您的代码。
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();
}
}还指出:
https://stackoverflow.com/questions/62848329
复制相似问题