事件消费者在事件查询中使用WITHIN子句来指定轮询间隔或分组间隔.
轮询间隔是Windows Management Instrumentation(WMI)用于对内部事件负责类的数据提供者进行轮询的间隔,其中查询的事件是该事件的成员。该间隔是必须传送事件通知之前可以通过的最长时间。消费者在消费者需要通知对类进行更改时,消费者在WITHIN子句中使用轮询间隔,并且事件提供者不可用。消费者注册一个内在事件,并包括轮询间隔。
要指定轮询间隔,请将WITHIN子句放在WHERE子句之前,如下所示:
SELECT * FROM IntrinsicEventClass WITHIN interval
WHERE property = value
IntrinsicEventClass是事件是成员的内在事件类,interval是轮询间隔,value是消费者需要通知的属性的值。
轮询间隔是一个浮点数,并且可以是小数,以接受小于1秒的值。但是,由于指定太小的值,所以间隔应该表示秒数,而不是非常小的值,因为指定太小的值可能导致WMI由于资源密集的轮询性质而拒绝该语句无效—。因为大多数事件消费者不需要立即通知,因此建议使用间隔大于5分钟。
以下查询示例请求WMI每隔10秒检查发生在Win32_LogicalDisk类的实例的更改。如果在指定的轮询间隔内修改了该类的实例,则会为每个修改发送通知事件。
SELECT * FROM __InstanceModificationEvent WITHIN 10
WHERE TargetInstance ISA "Win32_LogicalDisk"
根据查询,事件提供者和WMI可以共享提供事件的任务。例如,支持事件__InstanceCreationEvent和__InstanceModificationEvent系统类的事件提供者,而不是__InstanceDeletionEvent系统类的事件。以下查询使事件提供者能够在创建和修改事件时生成创建和修改事件,并在创建事件时进行传递。该查询还允许WMI使用轮询机制每10(十)秒生成__InstanceDeletionEvent事件。
SELECT * FROM __InstanceOperationEvent WITHIN 10
WHERE TargetInstance ISA "MyOwnClass"
您也可以使用WITHIN子句来指定分组间隔。分组间隔是一个无符号的32位整数,指定接收到初始事件后的时间段,在此期间,WMI应收集类似的事件。当这个时间段到期时,WMI提供由所有类似事件组成的聚合事件。有关更多信息,请参阅GROUP条款。
注册频繁发生的事件的事件消费者使用WITHIN子句的分组间隔。在事件查询中将GROUP WITHIN添加到WHERE子句中会导致WMI发送一个聚合事件而不是许多事件。聚合事件由__AggregateEvent系统类表示。
要指定分组间隔,请在GROUP子句之后立即放置WITHIN子句。
SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval
EventClass是事件是成员的事件类,value是消费者需要通知的属性的值,Interval是分组间隔。
有关详细信息,请参阅确定要接收的事件类型。
Windows Server 2003: 只有具有管理员权限,才能使用轮询查询创建永久事件消费者。