如何在C#写的WINDOWS服务中,使线程在固定的时间运行?
只存在一个线程,这个线程希望每隔几个小时执行一次,例如每天的1点,5点,9点,13点,17点,21点!在不论什么时间启动该服务,只要它不在这几个时间上,就不让它运行!!想...
只存在一个线程,这个线程希望每隔几个小时执行一次,例如每天的1点,5点,9点,13点,17点,21点!
在不论什么时间启动该服务,只要它不在这几个时间上,就不让它运行!!
想问问有没有什么好的方法?
我想到一个是在该线程start之前,先获得当前时间的HOUR,如果不在这几个的话,再一一判断,当前时间距以上以个时间断有多长时间,然后让线程sleep这些时间
不过我觉得这个办法太笨,有没有更好的方法呢? 展开
在不论什么时间启动该服务,只要它不在这几个时间上,就不让它运行!!
想问问有没有什么好的方法?
我想到一个是在该线程start之前,先获得当前时间的HOUR,如果不在这几个的话,再一一判断,当前时间距以上以个时间断有多长时间,然后让线程sleep这些时间
不过我觉得这个办法太笨,有没有更好的方法呢? 展开
2个回答
展开全部
放着Timer对象你咋就想不起来呢?
思想很简单,比如时间间隔是1小时
private void init()
{
...
interval = new TimeSpan(initData.CSRSetting.Interval, 0,0);//単位:1小时
timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(OnTimer);
timer.AutoReset = false;
this.StartTimer();
...
}
private void OnTimer(Object source, ElapsedEventArgs e)
{
//该干啥干啥
...
StartTimer();
}
private void StartTimer()
{
lock (this)
{
if (timer != null && interval != TimeSpan.Zero)
{
//计算这次运行完的时刻到下一次开始时刻的差值
timer.Interval = (时刻差值);
timer.Enabled = true;//这里就开始跑了
}
}
}
如果有特殊要求,你也可以重载Threading.Timer对象。
以上为非正式代码,不要直接Copy哦。
有问题再问吧。
思想很简单,比如时间间隔是1小时
private void init()
{
...
interval = new TimeSpan(initData.CSRSetting.Interval, 0,0);//単位:1小时
timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(OnTimer);
timer.AutoReset = false;
this.StartTimer();
...
}
private void OnTimer(Object source, ElapsedEventArgs e)
{
//该干啥干啥
...
StartTimer();
}
private void StartTimer()
{
lock (this)
{
if (timer != null && interval != TimeSpan.Zero)
{
//计算这次运行完的时刻到下一次开始时刻的差值
timer.Interval = (时刻差值);
timer.Enabled = true;//这里就开始跑了
}
}
}
如果有特殊要求,你也可以重载Threading.Timer对象。
以上为非正式代码,不要直接Copy哦。
有问题再问吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询