Windows 服务重叠
Windows Service Overlaps
我想多了解一些 Windows 服务。我有一个每 15 秒 运行s。如果 15 秒再次到时服务仍在执行,会发生什么情况? Can/does 服务 运行 与自身同时存在?如果同时有太多 运行 服务会造成严重的内存问题吗?
编辑
所以我应该更清楚:服务是 运行ning 并且计时器每 15 秒流逝一次以 运行 一组操作。我想知道如果在前一个 运行 仍在执行时该计时器已经过去,会发生什么样的结果。它应该被视为递归调用吗?
据我所知,您一次只能有一个 windows 服务 运行,并且该服务会使用计时器定期执行任务。
如果您生成一个新线程来执行上述任务,并且当计时器再次触发时该任务仍有可能 运行,那么您需要使用某种同步技术,例如互斥锁控制对共享资源的访问,防止两个线程相互干扰。
或者,如果互斥锁(等)已经锁定,并且任务每 15 秒运行一次且不会失败并不重要,则您可以跳过 运行 任务。
我在开发此类服务时使用的典型解决方案是不实际使用重复计时器。我所做的是创建一个单次计时器,设置为在 15 分钟内计时。当计时器的过程开始时,我记录当前时间,并用它来找到过程结束时的 运行 时间。使用它我设置了另一个计时器(或重置同一个计时器)在 15 分钟内关闭 - proc 实际花费的时间。如果过程超过 15 分钟,我可以调整时间。这样计时器就永远不会重叠和叠加。
我想多了解一些 Windows 服务。我有一个每 15 秒 运行s。如果 15 秒再次到时服务仍在执行,会发生什么情况? Can/does 服务 运行 与自身同时存在?如果同时有太多 运行 服务会造成严重的内存问题吗?
编辑
所以我应该更清楚:服务是 运行ning 并且计时器每 15 秒流逝一次以 运行 一组操作。我想知道如果在前一个 运行 仍在执行时该计时器已经过去,会发生什么样的结果。它应该被视为递归调用吗?
据我所知,您一次只能有一个 windows 服务 运行,并且该服务会使用计时器定期执行任务。
如果您生成一个新线程来执行上述任务,并且当计时器再次触发时该任务仍有可能 运行,那么您需要使用某种同步技术,例如互斥锁控制对共享资源的访问,防止两个线程相互干扰。
或者,如果互斥锁(等)已经锁定,并且任务每 15 秒运行一次且不会失败并不重要,则您可以跳过 运行 任务。
我在开发此类服务时使用的典型解决方案是不实际使用重复计时器。我所做的是创建一个单次计时器,设置为在 15 分钟内计时。当计时器的过程开始时,我记录当前时间,并用它来找到过程结束时的 运行 时间。使用它我设置了另一个计时器(或重置同一个计时器)在 15 分钟内关闭 - proc 实际花费的时间。如果过程超过 15 分钟,我可以调整时间。这样计时器就永远不会重叠和叠加。