任务空闲条件
当计算机进入空闲状态时,可以通过多种方式处理任务。 这包括定义空闲触发器或设置任务启动时的空闲条件。
检测空闲状态
在 Windows 7 中,任务计划程序每隔 15 分钟验证计算机是否处于空闲状态。 任务计划程序使用两个条件检查空闲状态:用户缺席和资源消耗不足。 如果在此期间没有键盘或鼠标输入,则将用户视为不存在。 如果所有处理器和所有磁盘在上次检测间隔的 90% 以上处于空闲状态,则计算机被视为空闲。 (设置ES_DISPLAY_REQUIRED标志的任何演示文稿类型应用程序例外。此标志强制任务计划不认为系统处于空闲状态,无论用户活动或资源消耗量如何。)
在 Windows 7 中,即使低优先级线程 (线程优先级 < 正常) 执行,任务计划程序也会将处理器视为空闲。
在 Windows 7 中,当任务计划程序检测到计算机处于空闲状态时,服务仅等待用户输入以标记空闲状态的结束。
在Windows 8中,任务计划程序执行相同的常规用户缺勤和资源消耗检查。 但是,任务计划程序依赖于操作系统电源子系统来检测用户状态。 默认情况下,在四分钟未输入键盘或鼠标后,用户被视为缺席。 用户存在时,资源消耗验证时间将缩短到 10 分钟间隔。 当用户离开时,验证时间将缩短到 30 秒间隔。 任务计划程序对以下事件进行额外的资源消耗检查:
- 用户状态已更改
- AC/DC 电源已更改
- 电池电量仅在电池) 时 (更改
发生上述任何事件时,任务计划程序将测试计算机自上次验证时间以来的空闲状态。 实际上,这意味着,如果自上次验证时间以来已满足其他条件,则任务计划程序可能会在检测到用户缺席后立即将系统声明为空闲状态。
在 Windows 8 中,CPU 和 IO 阈值设置为 80%。
在检测 Windows 8 Server 中的空闲状态时,任务计划程序不会考虑用户存在或缺席。 为了标记空闲状态的结束,任务计划程序在 90 分钟内修改资源消耗量一次。
定义空闲触发器
当计算机进入空闲状态时,可以通过定义空闲触发器来启动任务。
仅当计算机在触发器的启动边界之后进入空闲状态时,空闲触发器才会触发任务操作。
应用程序可以使用 IIdleTrigger 接口定义空闲触发器。
如果读取或写入 XML,空闲触发器由任务计划程序架构的 IdleTrigger 元素指定。
空闲条件的任务设置
任务设置可用于定义当计算机进入空闲状态时任务计划程序如何处理任务。
下图提供了三个可能的时间线,这些时间线显示了这些不同的空闲条件彼此之间的关系。 请注意,在激活任务触发器或按需启动任务时,插图开始 (,而不请求 忽略) 现有任务约束 。
注意
已弃用 “持续时间 ”和“ 等待时间” 设置。 它们仍存在于任务计划程序用户界面中,并且它们的接口方法可能仍返回有效值,但不再使用它们。
以下列表描述了空闲条件。
- 空闲启动:计算机进入空闲状态的时间。
- 空闲结束时间:计算机从空闲状态转换的时间。 请注意,计算机处于空闲状态的时间量与前面所述的空闲持续时间无关。
已弃用空闲等待和空闲持续时间。
- 空闲等待:任务计划程序在激活任务触发器后或按需启动任务后等待空闲状态出现的时间量。
- 空闲持续时间:希望计算机在启动任务之前处于空闲状态的时间量。
例如,如果任务设置为仅当计算机空闲 30 分钟时启动,并且任务等待计算机空闲 10 分钟,则仅当计算机在激活触发器之前已空闲 25 分钟时,才会在 5 分钟内启动该任务。 如果计算机在触发器激活 5 分钟后进入空闲状态,则任务不会启动。
默认情况下,任务 DisallowStartIfOnBatteries 属性设置为 true,这意味着当计算机使用电池电源运行时,任务计划程序服务不会运行由空闲触发器 (或具有空闲条件) 的触发器触发的任务。 可以通过将 DisallowStartIfOnBatteries 属性设置为 false 来更改此行为。
如果任务由空闲触发器触发,则忽略 IIdleSettings 接口的 WaitTimeout 属性 (IdleSettings 用于脚本) 。
应用程序可以通过在 IIdleSettings 和 IIdleTrigger 接口中设置属性来控制空闲条件。
如果读取或写入 XML,将在任务计划程序架构的 Settings 元素中指定这些条件。
循环空闲条件
如果计算机正在循环进入和退出空闲状态,则可以使用以下空闲条件终止并重启任务。 若要终止并重启任务,必须将属性和元素都设置为 True:
- 若要在空闲条件结束时终止任务,请将 StopOnIdleEnd 属性或 StopOnIdleEnd 元素设置为 True。
- 若要在计算机再次进入空闲状态时重启任务,请将 RestartOnIdle 属性或 RestartOnIdle 元素设置为 True。