classe Win32_Thread

La classe WMIWin32_Thread rappresenta un thread di esecuzione. Mentre un processo deve avere un thread di esecuzione, il processo può creare altri thread per eseguire attività in parallelo. I thread condividono l'ambiente di processo, quindi più thread nello stesso processo usano meno memoria rispetto allo stesso numero di processi.

La sintassi seguente è semplificata dal codice MOF (Managed Object Format) e include tutte le proprietà ereditate. Le proprietà e i metodi sono in ordine alfabetico, non in ordine MOF.

Sintassi

[Dynamic, Provider("CIMWin32"), UUID("{8502C4DD-5FBB-11D2-AAC1-006008C78BC7}"), AMENDMENT]
class Win32_Thread : CIM_Thread
{
  string   Caption;
  string   CreationClassName;
  string   CSCreationClassName;
  string   CSName;
  string   Description;
  uint64   ElapsedTime;
  uint16   ExecutionState;
  string   Handle;
  datetime InstallDate;
  uint64   KernelModeTime;
  string   Name;
  string   OSCreationClassName;
  string   OSName;
  uint32   Priority;
  uint32   PriorityBase;
  string   ProcessCreationClassName;
  string   ProcessHandle;
  uint32   StartAddress;
  string   Status;
  uint32   ThreadState;
  uint32   ThreadWaitReason;
  uint64   UserModeTime;
};

Members

La classe Win32_Thread include questi tipi di membri:

Proprietà

La classe Win32_Thread ha queste proprietà.

Didascalia

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: MaxLen (64), DisplayName ("Caption")

Breve descrizione dell'oggetto.

Questa proprietà viene ereditata da CIM_ManagedSystemElement.

CreationClassName

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: Cim_Key, MaxLen (256)

Nome della prima classe concreta da visualizzare nella catena di ereditarietà utilizzata nella creazione di un'istanza. Se utilizzata con le altre proprietà chiave della classe, questa proprietà consente di identificare in modo univoco tutte le istanze di questa classe e delle relative sottoclassi.

Questa proprietà viene ereditata da CIM_Thread.

CSCreationClassName

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: propagati ("CIM_Process. CSCreationClassName"), Cim_Key, MaxLen (256)

Nome della classe di creazione del sistema computer di ambito.

Questa proprietà viene ereditata da CIM_Thread.

CSName

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: propagati ("CIM_Process. CSName"), Cim_Key, MaxLen (256)

Nome del sistema computer di definizione dell'ambito.

Questa proprietà viene ereditata da CIM_Thread.

Descrizione

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: DisplayName ("Description")

Descrizione dell'oggetto.

Questa proprietà viene ereditata da CIM_ManagedSystemElement.

ElapsedTime

Tipo di dati: uint64

Tipo di accesso: sola lettura

Qualificatori: MappingStrings ("Win32API| Strutture dei dati sulle prestazioni | PERF_OBJECT_TYPE| PerfTime"), unità ("millisecondi")

Tempo di esecuzione totale, espresso in millisecondi, assegnato a questo thread dopo la creazione.

Per altre informazioni sull'uso di valori uint64 negli script, vedere Scripting in WMI.

ExecutionState

Tipo di dati: uint16

Tipo di accesso: sola lettura

Condizione operativa corrente del thread.

Questa proprietà viene ereditata da CIM_Thread.

Sconosciuto (0)

Altro (1)

Pronto (2)

Esecuzione (3)

Bloccato (4)

Sospeso bloccato (5)

Pronto sospeso (6)

Handle

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: MaxLen (256), Override ("Handle"), MappingStrings ("Win32API| Strutture della Guida degli strumenti | THREADENTRY32|th32ThreadID")

Handle in un thread. L'handle ha diritti di accesso completi per impostazione predefinita. Con l'accesso di sicurezza corretto, l'handle può essere usato in qualsiasi funzione che accetta un handle di thread. A seconda del flag di ereditarietà specificato al momento della creazione, questo handle può essere ereditato dai processi figlio.

InstallDate

Tipo di dati: datetime

Tipo di accesso: sola lettura

Qualificatori: MappingStrings ("MIF. DMTF| ComponentID|001.5"), DisplayName ("Data di installazione")

L'oggetto è stato installato. Questa proprietà non richiede un valore per indicare che l'oggetto è installato.

Questa proprietà viene ereditata da CIM_ManagedSystemElement.

KernelModeTime

Tipo di dati: uint64

Tipo di accesso: sola lettura

Qualificatori: Override ("KernelModeTime"), MappingStrings ("Win32API| Strutture dei dati sulle prestazioni | PERF_OBJECT_TYPE| PrivilegedTime"), unità ("100 nanosecondi")

Tempo in modalità kernel, in unità di 100 nanosecondi. Se queste informazioni non sono disponibili, è necessario usare il valore 0 (zero).

Per altre informazioni sull'uso di valori uint64 negli script, vedere Scripting in WMI.

Nome

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: DisplayName ("Name")

Etichetta in base alla quale l'oggetto è noto. Quando viene sottoclassata, è possibile eseguire l'override della proprietà in modo che sia una proprietà chiave.

Questa proprietà viene ereditata da CIM_ManagedSystemElement.

OSCreationClassName

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: propagati ("CIM_Process. OSCreationClassName"), Cim_Key, MaxLen (256)

Nome della classe di creazione del sistema operativo di definizione dell'ambito.

Questa proprietà viene ereditata da CIM_Thread.

OSName

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: propagati ("CIM_Process. OSName"), Cim_Key, MaxLen (256)

Nome del sistema operativo di definizione dell'ambito.

Questa proprietà viene ereditata da CIM_Thread.

Priorità

Tipo di dati: uint32

Tipo di accesso: sola lettura

Qualificatori: Override ("Priority"), MappingStrings ("Win32API| Strutture della Guida degli strumenti | THREADENTRY32|tpDeltaPri")

Priorità dinamica del thread. Ogni thread ha una priorità dinamica usata dall'utilità di pianificazione per determinare il thread da eseguire. Inizialmente, la priorità dinamica di un thread corrisponde alla priorità di base. Il sistema può aumentare e ridurre la priorità dinamica, per garantire che sia reattivo (garantendo che nessun thread venga risolto per il tempo del processore). Il sistema non aumenta la priorità dei thread con un livello di priorità di base compreso tra 16 e 31. Solo i thread con priorità di base compresa tra 0 e 15 ricevono boost di priorità dinamica. I numeri più alti indicano priorità più elevate.

PriorityBase

Tipo di dati: uint32

Tipo di accesso: sola lettura

Qualificatori: MappingStrings ("Win32API| Strutture dei dati sulle prestazioni | PERF_OBJECT_TYPE| PerfPriorityBase")

Priorità di base corrente di un thread. Il sistema operativo può aumentare la priorità dinamica del thread al di sopra della priorità di base se il thread gestisce l'input dell'utente o abbassarlo verso la priorità di base se il thread diventa associato al calcolo. La proprietà PriorityBase può avere un valore compreso tra 0 e 31.

ProcessCreationClassName

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: propagati ("CIM_Process. CreationClassName"), Cim_Key, MaxLen (256)

Valore della proprietà CreationClassName del processo di ambito.

Questa proprietà viene ereditata da CIM_Thread.

ProcessHandle

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: MaxLen (256), Override ("ProcessHandle"), Propagated ("CIM_Process. Handle"), MappingStrings ("Win32API| Strutture della Guida degli strumenti | THREADENTRY32|th32OwnerProcessID")

Processo che ha creato il thread. Il contenuto di questa proprietà può essere usato dagli elementi API (Application Programming Interface) di Windows.

StartAddress

Tipo di dati: uint32

Tipo di accesso: sola lettura

Qualificatori: MappingStrings ("WIn32API| Oggetto Thread | LPTHREAD_START_ROUTINE|lpStartAddress")

Indirizzo iniziale del thread. Poiché qualsiasi applicazione con accesso appropriato al thread può modificare il contesto del thread, questo valore può essere solo un'approssimazione dell'indirizzo iniziale del thread.

Status

Tipo di dati: string

Tipo di accesso: sola lettura

Qualificatori: MaxLen (10), DisplayName ("Status")

Stato corrente dell'oggetto. È possibile definire vari stati operativi e non operativi. Gli stati operativi includono: "OK", "Degraded" e "Pred Fail" (un elemento, ad esempio un'unità disco rigido abilitata per SMART, potrebbe funzionare correttamente, ma prevedere un errore nel prossimo futuro). Gli stati non operativi includono: "Error", "Starting", "Stopping" e "Service". Quest'ultimo, "Servizio", può essere applicato durante il ridimensionamento mirror di un disco, il ricaricamento di un elenco di autorizzazioni utente o altre operazioni amministrative. Non tutto questo lavoro è online, ma l'elemento gestito non è "OK" né in uno degli altri stati.

Questa proprietà viene ereditata da CIM_ManagedSystemElement.

I valori possibili sono:

OK ("OK")

Errore ("Errore ")

Danneggiato ("danneggiato ")

Sconosciuto ("Sconosciuto ")

Pred Fail ("Pred Fail ")

Avvio ("Avvio ")

Arresto ("arresto ")

Servizio ("Servizio ")

Sottolineato ("sottolineato ")

NonRecover ("NonRecover ")

Nessun contatto ("Nessun contatto")

Lost Comm ("Lost Comm")

ThreadState

Tipo di dati: uint32

Tipo di accesso: sola lettura

Qualificatori: MappingStrings ("Win32API| Stato thread")

Stato di esecuzione corrente per il thread.

Inizializzato (0)

Inizializzato: viene riconosciuto dal microkernel.

Pronto (1)

Pronto: è pronto per l'esecuzione nel successivo processore disponibile.

Esecuzione (2)

In esecuzione: è in esecuzione.

Standby (3)

Standby: sta per essere eseguito, solo un thread può trovarsi in questo stato alla volta.

Terminazione (4)

Terminato: l'esecuzione è stata completata.

In attesa (5)

In attesa: non è pronto per il processore, quando pronto, verrà riprogrammato.

Transizione (6)

Transizione: il thread è in attesa di risorse diverse dal processore,

Sconosciuto (7)

Sconosciuto: lo stato del thread è sconosciuto.

ThreadWaitReason

Tipo di dati: uint32

Tipo di accesso: sola lettura

Qualificatori: MappingStrings ("Win32API| Motivo attesa thread")

Motivo per cui il thread è in attesa. Questo valore è valido solo se il membro ThreadState è impostato su Transition (6). Le coppie di eventi consentono la comunicazione con sottosistemi protetti.

Executive (0)

FreePage (1)

FreePage

PageIn (2)

PoolAllocation (3)

ExecutionDelay (4)

FreePage (5)

PageIn (6)

Executive (7)

FreePage (8)

PageIn (9)

PoolAllocation (10)

ExecutionDelay (11)

FreePage (12)

PageIn (13)

EventPairHigh (14)

EventPairLow (15)

LPCReceive (16)

LPCReply (17)

VirtualMemory (18)

PageOut (19)

Sconosciuto (20)

UserModeTime

Tipo di dati: uint64

Tipo di accesso: sola lettura

Qualificatori: Override ("UserModeTime"), MappingStrings ("Win32API| Strutture dei dati sulle prestazioni| PERF_OBJECT_TYPE| UserTime"), Unità ("100 nanosecondi")

Tempo in modalità utente, in 100 unità nanosecondi. Se queste informazioni non sono disponibili, deve essere usato un valore pari a 0 (zero).

Per altre informazioni sull'uso di valori uint64 negli script, vedere Scripting in WMI.

Commenti

La classe Win32_Thread deriva da CIM_Thread.

Panoramica

Per il monitoraggio giornaliero di routine, in genere è necessario avere un elenco dettagliato dei thread e delle relative proprietà associate. I computer creano ed eliminano migliaia di thread durante il corso di un giorno e poche di queste creazioni o eliminazioni sono significative per chiunque ma lo sviluppatore che ha scritto il software.

Tuttavia, quando si verificano problemi con un'applicazione, il rilevamento dei singoli thread per un processo consente di identificare quando i thread vengono creati e quando (o se) vengono eliminati. Poiché i thread creati ma non eliminati causano perdite di memoria, il rilevamento dei singoli thread può essere utile per i tecnici di supporto. Allo stesso modo, l'identificazione delle priorità del thread può aiutare a individuare i thread che, eseguendo a una priorità anormale, preempting cpu cycles necessario da altri thread e altri processi.

Uso di Win32_Thread

Come implicito nel blocco di sintassi precedente, la classe Win32_Thread non segnala il nome del processo in cui viene eseguito ogni thread. Segnala invece l'ID del processo in cui viene eseguito il thread. Per restituire il nome di un processo e un elenco di tutti i relativi thread, lo script deve:

  1. Connettersi alla classe Win32_Process e restituire l'elenco dei processi e i relativi ID processo.
  2. Archiviare temporaneamente queste informazioni in una matrice o in un oggetto Dictionary.
  3. Per ogni ID processo, restituire l'elenco dei thread per tale processo e quindi visualizzare il nome del processo e l'elenco dei thread.

Esempio

L'esempio VBScript seguente monitora i thread in esecuzione in un computer.

Set objDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
For Each objProcess in colProcesses
 objDictionary.Add objProcess.ProcessID, objProcess.Name
Next
Set colThreads = objWMIService.ExecQuery("SELECT * FROM Win32_Thread")
For Each objThread in colThreads
 intProcessID = CInt(objThread.ProcessHandle)
 strProcessName = objDictionary.Item(intProcessID)
 Wscript.Echo strProcessName & VbTab & objThread.ProcessHandle & _
              VbTab & objThread.Handle & VbTab & objThread.ThreadState
Next

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Spazio dei nomi
Radice\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Vedi anche

CIM_Thread

Classi del sistema operativo