Clausola WITHIN
I consumer di eventi usano la clausola WITHIN nelle query di eventi per specificare un intervallo di polling o un intervallo di raggruppamento .
Un intervallo di polling è l'intervallo usato da Strumentazione gestione Windows (WMI) per eseguire il polling del provider di dati responsabile della classe per eventi intrinseci, di cui l'evento sottoposto a query è membro. Questo intervallo è la quantità massima di tempo che può trascorrere prima della notifica di un evento deve essere recapitata. Un consumer usa un intervallo di polling in una clausola WITHIN quando il consumer richiede la notifica delle modifiche a una classe e un provider di eventi non è disponibile. Il consumer esegue la registrazione per un evento intrinseco e include l'intervallo di polling.
Per specificare un intervallo di polling, inserire la clausola WITHIN immediatamente prima della clausola WHERE, come illustrato di seguito:
SELECT * FROM IntrinsicEventClass WITHIN interval WHERE property = value
IntrinsicEventClass è la classe di evento intrinseca di cui l'evento è membro, l'intervallo è l'intervallo di polling e il valore è il valore per la proprietà in cui il consumer richiede la notifica.
L'intervallo di polling è un numero a virgola mobile e può essere frazionaria per accettare valori inferiori a 1 secondo. Tuttavia, l'intervallo deve rappresentare un numero di secondi anziché un valore estremamente piccolo, ad esempio 0,001, perché specificando un valore troppo piccolo, WMI può rifiutare l'istruzione come non valida, a causa della natura di polling a elevato utilizzo di risorse. Poiché la maggior parte dei consumer di eventi non richiede una notifica immediata, è consigliabile usare un intervallo maggiore di 5 minuti.
Nell'esempio di query seguente viene richiesto a WMI di controllare ogni 10 secondi le modifiche apportate alle istanze della classe Win32_LogicalDisk. Se un'istanza della classe viene modificata entro l'intervallo di polling specificato, viene inviato un evento di notifica per ogni modifica.
SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA "Win32_LogicalDisk"
A seconda della query, un provider di eventi e WMI possono condividere l'attività di fornire eventi. Ad esempio, un provider di eventi che supporta gli eventi delle classi di sistema __InstanceCreationEvent e __InstanceModificationEvent e non eventi della classe di sistema __InstanceDeletionEvent. La query seguente consente al provider di eventi di generare gli eventi di creazione e modifica man mano che si verificano e di recapitarli al momento della creazione. La query consente anche a WMI di generare __InstanceDeletionEvent eventi ogni 10 (dieci) secondi usando il meccanismo di polling.
SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA "MyOwnClass"
È anche possibile utilizzare la clausola WITHIN per specificare un intervallo di raggruppamento. Un intervallo di raggruppamento è un intero senza segno a 32 bit che specifica il periodo di tempo, dopo la ricezione di un evento iniziale, durante il quale WMI deve raccogliere eventi simili. Alla scadenza di questo periodo di tempo, WMI recapita l'evento di aggregazione, costituito da tutti gli eventi simili. Per altre informazioni, vedere clausola GROUP.
I consumer di eventi che si registrano per gli eventi che si verificano di frequente usano un intervallo di raggruppamento con la clausola WITHIN. L'aggiunta di GROUP WITHIN alla clausola WHERE in una query di eventi comporta l'invio di un evento di aggregazione WMI anziché di molti eventi. L'evento di aggregazione è rappresentato dalla classe di sistema __AggregateEvent.
Per specificare un intervallo di raggruppamento, inserire la clausola WITHIN immediatamente dopo la clausola GROUP.
SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval
EventClass è la classe di evento di cui l'evento è un membro, il valore è il valore della proprietà in cui il consumer richiede la notifica e Interval è l'intervallo di raggruppamento.
Per altre informazioni, vedere Determinare il tipo di evento da ricevere.
È possibile creare consumer di eventi permanenti con query di polling solo se si dispone di privilegi di amministratore.