Cláusula WITHIN

Los consumidores de eventos usan la cláusula WITHIN en las consultas de eventos para especificar un intervalo de sondeo o un intervalo de agrupación.

Un intervalo de sondeo es el intervalo que usa Instrumental de administración de Windows (WMI) para sondear el proveedor de datos responsable de la clase de eventos intrínsecos, del que el evento consultado es miembro. Este intervalo es la cantidad de tiempo máxima que puede transcurrir antes de entregarse la notificación de un evento. Un consumidor usa un intervalo de sondeo en una cláusula WITHIN cuando el consumidor requiere notificación de cambios en una clase y un proveedor de eventos no está disponible. El consumidor se registra para un evento intrínseco e incluye el intervalo de sondeo.

Para especificar un intervalo de sondeo, coloque la cláusula WITHIN inmediatamente antes de la cláusula WHERE, como se muestra a continuación:

SELECT * FROM IntrinsicEventClass WITHIN interval  WHERE property = value

IntrinsicEventClass es la clase de eventos intrínseca de la que el evento es miembro, interval es el intervalo de sondeo y value es el valor de la propiedad en la que el consumidor requiere notificación.

El intervalo de sondeo es un número de punto flotante y puede ser fraccional para aceptar valores menores de 1 segundo. Sin embargo, el intervalo debe representar un número de segundos en lugar de un valor extremadamente pequeño, como 0,001, porque especificar un valor demasiado pequeño puede hacer que WMI rechace la instrucción como no válida, debido a la naturaleza intensiva del recurso de sondeo. Dado que la mayoría de los consumidores de eventos no requieren una notificación inmediata, se recomienda usar un intervalo mayor que 5 minutos.

En el ejemplo de consulta siguiente se solicita que WMI compruebe cada 10 segundos los cambios que se producen en las instancias de la clase Win32_LogicalDisk. Si se modifica una instancia de la clase dentro del intervalo de sondeo especificado, se envía un evento de notificación para cada modificación.

SELECT * FROM __InstanceModificationEvent WITHIN 10  WHERE TargetInstance ISA "Win32_LogicalDisk"

Dependiendo de la consulta, un proveedor de eventos y WMI pueden compartir la tarea de proporcionar eventos. Por ejemplo, un proveedor de eventos que admite eventos de las clases del sistema __InstanceCreationEvent e __InstanceModificationEvent, y no eventos de la clase del sistema __InstanceDeletionEvent. La consulta siguiente permite al proveedor de eventos generar los eventos de creación y modificación a medida que se producen y entregarlos cuando se crean. La consulta también permite a WMI generar eventos __InstanceDeletionEvent cada 10 (diez) segundos mediante el mecanismo de sondeo.

SELECT * FROM __InstanceOperationEvent WITHIN 10  WHERE TargetInstance ISA "MyOwnClass"

También puede usar la cláusula WITHIN para especificar un intervalo de agrupación. Un intervalo de agrupación es un entero de 32 bits sin signo que especifica el período de tiempo, después de recibir un evento inicial, durante el cual WMI debe recopilar eventos similares. Cuando este período de tiempo expira, WMI entrega el evento agregado, formado por todos los eventos similares. Para obtener más información, vea Cláusula GROUP.

Los consumidores de eventos que se registran para eventos que se producen con frecuencia usan un intervalo de agrupación con la cláusula WITHIN. Agregar GROUP WITHIN a la cláusula WHERE en una consulta de eventos da como resultado que WMI envíe un evento agregado en lugar de varios eventos. El evento agregado se representa mediante la clase del sistema __AggregateEvent.

Para especificar un intervalo de agrupación, coloque la cláusula WITHIN inmediatamente después de la cláusula GROUP.

SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval

EventClass es la clase de eventos de la que el evento es miembro, value es el valor de la propiedad en la que el consumidor requiere notificación e Interval es el intervalo de agrupación.

Para más información, consulte Determinación del tipo de evento que se va a recibir.

Los consumidores de eventos permanentes solo se pueden crear con consultas de sondeo si tiene privilegios de administrador.