任务空闲条件
当计算机进入空闲状态时,可以通过多种方式处理任务。 这包括定义空闲触发器或设置任务启动时的空闲条件。
检测空闲状态
在 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 元素指定。
空闲条件的任务设置
任务设置可用于定义当计算机进入空闲状态时任务计划程序如何处理任务。
下图提供了三个可能的时间线,这些时间线显示了这些不同的空闲条件如何相互关联。 请注意,当激活任务触发器或按需启动任务时(无需请求 忽略现有任务约束)时,插图将启动。
注意
持续时间 和 WaitTimeout 设置已弃用。 它们仍存在于任务计划程序用户界面中,并且其接口方法可能仍返回有效值,但它们不再使用。
以下列表描述了空闲条件。
- 空闲开始时间:计算机进入空闲状态的时间。
- 空闲结束:计算机退出空闲状态的时间。 请注意,计算机处于空闲状态的时间量与之前描述的空闲持续时间时间无关。
已弃用空闲等待和空闲持续时间。
- 空闲等待:任务计划程序在激活任务触发器或按需启动任务后等待空闲状态发生的时间量。
- 空闲持续时间:在启动任务之前,希望计算机处于空闲状态的时间量。
例如,如果任务设置为仅在计算机空闲 30 分钟时启动,并且任务等待计算机空闲 10 分钟,则仅当计算机在激活触发器前 25 分钟处于空闲状态时,该任务才会在 5 分钟内启动。 如果计算机在激活触发器 5 分钟后进入空闲状态,则任务将不会启动。
默认情况下,任务 DisallowStartIfOnBatteries 属性设置为 true,这意味着当计算机在电池电源上运行时,任务计划程序服务不会运行由空闲触发器(或具有空闲条件的触发器)触发的任务。 可以通过将 DisallowStartIfOnBatteries 属性设置为 false 来更改此行为。
如果任务由空闲触发器触发,则忽略 IIdleSettings 接口的 WaitTimeout 属性(Scripting 的 IdleSettings)。
应用程序可以通过在 IIdleSettings 和 IIdleTrigger 接口中设置属性来控制空闲条件。
如果读取或写入 XML,这些条件是在任务计划程序架构的 设置 元素中指定的。
循环空闲条件
如果计算机正在进入和退出空闲状态,则可以使用以下空闲条件终止和重启任务。 若要终止并重启任务,必须将属性和元素都设置为 True:
- 若要在空闲条件结束时终止任务,请将 StopOnIdleEnd 属性或 StopOnIdleEnd 元素设置为 True。
- 若要在计算机再次进入空闲状态时重启任务,请将 RestartOnIdle 属性或 RestartOnIdle 元素设置为 True。