C# 为不同的双间隔值使用相同计时器的多个任务 请考虑下面的测试程序。 我有三个特定时间间隔的任务。[task1--task1Interval,[task2--task2Interval,[task3--task3Interval] 我想用一个定时器来执行这三个任务。 当间隔为整数时,一切正常。 我们希望通过双间隔值实现相同的功能,例如[task1Interval--0.1、[task2Interval--2.1、[task3Interval--3.1]
如果您有任何相同的建议,我们将不胜感激C# 为不同的双间隔值使用相同计时器的多个任务 请考虑下面的测试程序。 我有三个特定时间间隔的任务。[task1--task1Interval,[task2--task2Interval,[task3--task3Interval] 我想用一个定时器来执行这三个任务。 当间隔为整数时,一切正常。 我们希望通过双间隔值实现相同的功能,例如[task1Interval--0.1、[task2Interval--2.1、[task3Interval--3.1],c#,C#,如果您有任何相同的建议,我们将不胜感激 public class Class1 { private System.Timers.Timer _timer; private int _counter=0; private int task1Interval = 1; private int task2Interval = 2; private int task3Interval = 3; public void Start() {
public class Class1
{
private System.Timers.Timer _timer;
private int _counter=0;
private int task1Interval = 1;
private int task2Interval = 2;
private int task3Interval = 3;
public void Start()
{
this._timer = new System.Timers.Timer(100);
this._timer.AutoReset = true;
this._timer.Elapsed += new System.Timers.ElapsedEventHandler(this.serviceTimerElapse);
this._timer.Enabled = true;
this._timer.Start();
}
private void serviceTimerElapse(object source, System.Timers.ElapsedEventArgs e)
{
this._counter++;
if (this._counter % task1Interval == 0)
{
task1();
}
if (this._counter % task2Interval == 0)
{
task2();
}
if (this._counter % task3Interval == 0)
{
task3();
}
}
private void task1()
{
Console.WriteLine("task1 started");
}
private void task2()
{
Console.WriteLine("task2 started");
}
private void task3()
{
Console.WriteLine("task3 started");
}
}
这在一个原始的游戏引擎中是很常见的。你需要一个具有一定粒度的世界“时钟”,你在每个“滴答”中处理每个事件 您已经知道您的粒度需要是间隔中最小的公分母(在本例中为0.1)。然后,基本解决方案将包括每个任务的计数器以及阈值 Ex(伪代码):
那么你的问题是什么呢?非常感谢你的宝贵意见。希望能有所帮助。如果适合你,请将其标记为正确答案。
private const double TICK = 0.1;
private double TASK_1_THRESHOLD = 0.1;
private double TASK_1_COUNT = 0.0;
private double TASK_2_THRESHOLD = 2.1;
private double TASK_2_COUNT = 0.0;
private double TASK_3_THRESHOLD = 3.1;
private double TASK_3_COUNT = 0.0;
private void tick()
{
TASK_1_COUNT += TICK;
TASK_2_COUNT += TICK;
TASK_3_COUNT += TICK;
if (TASK_1_COUNT >= TASK_1_THRESHOLD) {
TASK_1_COUNT = 0.0;
task1();
}
// do this for each
}