我可以构建一个Windows服务并进行安装。每小时运行一次的Windows服务
我很好奇我怎么能每小时运行一次这项服务?我希望它定期每小时运行一次。
我还需要知道它正在运行的小时范围,以便我可以将它存储在某个地方。
我该怎么做?
编辑:此服务将安装在许多机器上,因此,我不想在100台服务器上创建计划任务。
我可以构建一个Windows服务并进行安装。每小时运行一次的Windows服务
我很好奇我怎么能每小时运行一次这项服务?我希望它定期每小时运行一次。
我还需要知道它正在运行的小时范围,以便我可以将它存储在某个地方。
我该怎么做?
编辑:此服务将安装在许多机器上,因此,我不想在100台服务器上创建计划任务。
如果你想有一个任务在定期运行,而不是不断,你应该考虑使用Task Scheduler。
如果你需要你的代码是一个服务,但要每小时“激活”,最简单的方法是使你的服务成为一个COM对象,并且每小时调度一个简单的任务,调用一个jscript/vbscript创建你的COM对象并调用简单的方法。
另一种方法是使用任何等待API“浪费”一小时而不消耗周期。
请注意,还必须考虑到,依赖于你的情况下一些有趣的设计决策是:
其中有些是由任务调度程序照顾的,所以我强烈建议在路由中等待一小时的代码。
您可以创建一个每小时运行一次的scheduled task,以运行该服务或发送消息以“唤醒”。然后,无论是在当前时间传递计划的任务请求,还是让您的程序在唤醒时获取当前时间。
Task Scheduler Managed Wrapper可以帮助您以编程方式进行设置;你也可以谷歌的其他资源。
但我想能够在代码中实现。想象这个服务将被安装在许多服务器上,我不想去每个服务器并创建一个计划任务。 – DarthVader 2010-04-07 02:46:00
@ user177883:您可以以编程方式创建计划任务,就像您可以以编程方式创建服务一样。 – 2010-04-07 02:49:42
有几个选项。
Thread.Sleep(1000*60*60);
如果您尝试在睡眠一小时时停止服务,会发生什么情况? – 2010-04-08 08:37:47
Thread.Sleep(TimeSpan.FromHours(1));
代码更易读这样
Thread.Sleep()
解决方案将确保您的服务将在一个小时的时间间隔运行,而不是每隔一小时即每个任务将1小时的时间+运行任务开始。考虑在您的服务中使用Timer。这将是一个更强大的解决方案,因为您可以控制何时运行任务,监视其进度等。请记住,每个Timer
事件将在不同的线程中触发,如果任务花费的时间超过一个小时,您可能会等待第一个任务完成以避免并发任务。
任务调度程序可能是一个好主意,但服务旨在执行此操作。服务易于安装并正确记录事情。您只需要在服务开始时安装一个系统计时器(System.Threading.Timer),或者还有一个计时器。
等待API浪费CPU周期?你能详细解释一下吗?等待只是系统引发的事件,我不认为它在轮询任何事情。 – 2011-11-07 07:25:49
我不确定你是否正确理解我。我试图说,等待一段时间过后,等待的API优化为不使用CPU周期。 – 2011-11-07 21:56:56