Windows服务中的定时器间隔

本文关键字:定时器 服务 Windows | 更新日期: 2023-09-27 18:06:09

我已经开发了windows服务&在寡妇的服务中使用的是system.threading.timer,在这种情况下,计时器工作得很好,但有时它会改变执行的时间,例如,我将计时器设置为10秒,然后它每10秒执行一次,但有时它会在11秒开始。我得到了这个输出

<>之前18-08-2011 10:00:1018-08-2011 10:00:1018-08-2011 10:00:2018-08-2011 10:00:3018-08-2011 10:00:4018-08-2011 10:00:1118-08-2011 10:00:2218-08-2011 10:00:3318-08-2011 10:00:44之前

但是我希望输出为

<>之前18-08-2011 10:00:1018-08-2011 10:00:2018-08-2011 10:00:3018-08-2011 10:00:4018-08-2011 10:00:5018-08-2011 10:00:0018-08-2011 10:00:1018-08-2011 10:00:20之前

我使用了system.threading.timer

<>之前public void SetTimers(int timer, DataRow row){时间间隔dueTime;时间间隔的时间间隔;settimeinterval(行,超时时间,超时时间);timer1[timer] = new System.Threading。定时器(databaseTrensfer, row, dueTime, interval);}private void settimeinterval (DataRow row, out TimeSpan tduetime, out TimeSpan tsperperiod){string alarmType = Convert.ToString(row["EBase"]);string EType = Convert.ToString(row["EType"]);string frequency = Convert.ToString(row[" effrequency "]);if (alarmType == "Millisecond"){int frequency1 = Convert.ToInt32(row[" frequency "]);tsDueTime = new TimeSpan(0,0,0,0, frequency1);//frequency1 =interval timingtsPeriod = new TimeSpan(0,0,0,0, frequency1);}if (alarmType == "Second"){int frequency1 = Convert.ToInt32(row[" frequency "]);tsDueTime = new TimeSpan(0,0,0, frequency1);tsPeriod = new TimeSpan(0,0,0, frequency1);}if (alarmType == "Once"){tsDueTime = new TimeSpan(0,0,0);tsPeriod = new TimeSpan(0,0,0);}if (alarmType == "Minute"){int frequency1 = Convert.ToInt32(row[" frequency "]);tsDueTime = new TimeSpan(0, frequency1, 0);tsPeriod = new TimeSpan(0, frequency1, 0);}如果(alarmType == "Hour"){Int minute = 0;Int frequency1 = 1;if (Convert.ToString(row["RelativeFactor"]) != ")minute = Convert.ToInt32(row["RelativeFactor"]);if (Convert.ToString(row[" frequency "]) != ")frequency1 = Convert.ToInt32(row[" tfrequency "]);tsDueTime = new TimeSpan(frequency1, minute, 0);tsPeriod = new TimeSpan(frequency1, 0,0);}其他的{tsDueTime = new TimeSpan();tsPeriod = new TimeSpan();}}之前

thanks in advance

Windows服务中的定时器间隔

对于活动之间需要如此精确的间隔,我会非常谨慎。如果你确实需要这样的精度,你通常必须设置一个时间间隔小得多的计时器,然后检查是否达到了执行下一个动作的正确时间。

。如果你想要10秒的间隔,并且想要避免11秒的间隔,你可以将计时器间隔设置为0.1秒,然后如果距离你上次做某事不到10秒就什么都不做。

或者,您可以将间隔保持在10秒,但是测量计时器运行的频率并将间隔更改为将平均间隔更改为10秒—如果您刚刚有几个11秒的间隔,则将计时器更改为9(或9.5)秒,直到平均值返回到10秒。