Classe CWorkerThread
Questa classe crea un thread di lavoro o usa un thread di lavoro esistente, attende uno o più handle di oggetti kernel ed esegue una funzione client specificata quando viene segnalato uno degli handle.
Importante
Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.
Sintassi
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Parametri
ThreadTraits
Classe che fornisce la funzione di creazione del thread, ad esempio CRTThreadTraits o Win32ThreadTraits.
Membri
Strutture protette
Nome | Descrizione |
---|---|
WorkerClientEntry |
Costruttori pubblici
Nome | Descrizione |
---|---|
CWorkerThread::CWorkerThread | Costruttore per il thread di lavoro. |
CWorkerThread::~CWorkerThread | Distruttore per il thread di lavoro. |
Metodi pubblici
Nome | Descrizione |
---|---|
CWorkerThread::AddHandle | Chiamare questo metodo per aggiungere l'handle di un oggetto waitable all'elenco gestito dal thread di lavoro. |
CWorkerThread::AddTimer | Chiamare questo metodo per aggiungere un timer di attesa periodico all'elenco gestito dal thread di lavoro. |
CWorkerThread::GetThreadHandle | Chiamare questo metodo per ottenere l'handle del thread di lavoro. |
CWorkerThread::GetThreadId | Chiamare questo metodo per ottenere l'ID thread del thread di lavoro. |
CWorkerThread::Initialize | Chiamare questo metodo per inizializzare il thread di lavoro. |
CWorkerThread::RemoveHandle | Chiamare questo metodo per rimuovere un handle dall'elenco di oggetti waitable. |
CWorkerThread::Shutdown | Chiamare questo metodo per arrestare il thread di lavoro. |
Osservazioni:
Per usare CWorkerThread
Creare un'istanza di questa classe.
Chiamare CWorkerThread::Initialize.
Chiamare CWorkerThread::AddHandle con l'handle di un oggetto kernel e un puntatore a un'implementazione di IWorkerThreadClient.
o
Chiamare CWorkerThread::AddTimer con un puntatore a un'implementazione di IWorkerThreadClient.
Implementare IWorkerThreadClient::Execute per eseguire un'azione quando viene segnalato l'handle o il timer.
Per rimuovere un oggetto dall'elenco di oggetti waitable, chiamare CWorkerThread::RemoveHandle.
Per terminare il thread, chiamare CWorkerThread::Shutdown.
Requisiti
Intestazione: atlutil.h
CWorkerThread::AddHandle
Chiamare questo metodo per aggiungere l'handle di un oggetto waitable all'elenco gestito dal thread di lavoro.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Parametri
hObject
Handle di un oggetto waitable.
pClient
Puntatore all'interfaccia IWorkerThreadClient sull'oggetto da chiamare quando viene segnalato l'handle.
dwParam
Parametro da passare a IWorkerThreadClient::Execute quando viene segnalato l'handle.
Valore restituito
Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.
Osservazioni:
IWorkerThreadClient::Execute verrà chiamato tramite pClient quando viene segnalato l'handle hObject.
CWorkerThread::AddTimer
Chiamare questo metodo per aggiungere un timer di attesa periodico all'elenco gestito dal thread di lavoro.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
Parametri
dwInterval
Specifica il periodo del timer in millisecondi.
pClient
Puntatore all'interfaccia IWorkerThreadClient sull'oggetto da chiamare quando viene segnalato l'handle.
dwParam
Parametro da passare a IWorkerThreadClient::Execute quando viene segnalato l'handle.
phTimer
[out] Indirizzo della variabile HANDLE che, in caso di esito positivo, riceve l'handle al timer appena creato.
Valore restituito
Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.
Osservazioni:
IWorkerThreadClient::Execute verrà chiamato tramite pClient quando il timer viene segnalato.
Passare l'handle timer da phTimer a CWorkerThread::RemoveHandle per chiudere il timer.
CWorkerThread::CWorkerThread
Costruttore.
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
Distruttore.
~CWorkerThread() throw();
Osservazioni:
Chiama CWorkerThread::Shutdown.
CWorkerThread::GetThreadHandle
Chiamare questo metodo per ottenere l'handle del thread di lavoro.
HANDLE GetThreadHandle() throw();
Valore restituito
Restituisce l'handle di thread o NULL se il thread di lavoro non è stato inizializzato.
CWorkerThread::GetThreadId
Chiamare questo metodo per ottenere l'ID thread del thread di lavoro.
DWORD GetThreadId() throw();
Valore restituito
Restituisce l'ID thread o NULL se il thread di lavoro non è stato inizializzato.
CWorkerThread::Initialize
Chiamare questo metodo per inizializzare il thread di lavoro.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Parametri
pThread
Thread di lavoro esistente.
Valore restituito
Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.
Osservazioni:
Questo metodo deve essere chiamato per inizializzare l'oggetto dopo la creazione o dopo una chiamata a CWorkerThread::Shutdown.
Per avere due o più CWorkerThread
oggetti utilizzano lo stesso thread di lavoro, inizializzarne uno senza passare alcun argomento e quindi passare un puntatore a tale oggetto ai Initialize
metodi degli altri. Gli oggetti inizializzati utilizzando il puntatore devono essere arrestati prima dell'oggetto utilizzato per inizializzarli.
Vedere CWorkerThread::Shutdown per informazioni su come cambia il comportamento di tale metodo quando viene inizializzato usando un puntatore a un oggetto esistente.
CWorkerThread::RemoveHandle
Chiamare questo metodo per rimuovere un handle dall'elenco di oggetti waitable.
HRESULT RemoveHandle(HANDLE hObject) throw();
Parametri
hObject
Handle da rimuovere.
Valore restituito
Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.
Osservazioni:
Quando l'handle viene rimosso IWorkerThreadClient::CloseHandle verrà chiamato sull'oggetto associato passato a AddHandle. Se la chiamata ha esito negativo, CWorkerThread
chiamerà la funzione CloseHandle di Windows sull'handle.
CWorkerThread::Shutdown
Chiamare questo metodo per arrestare il thread di lavoro.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Parametri
dwWait
Tempo in millisecondi di attesa dell'arresto del thread di lavoro. ATL_WORKER_THREAD_WAIT il valore predefinito è 10 secondi. Se necessario, è possibile definire il proprio valore per questo simbolo prima di includere atlutil.h.
Valore restituito
Restituisce S_OK in caso di esito positivo o un errore HRESULT in caso di errore, ad esempio se il valore di timeout, dwWait, viene superato.
Osservazioni:
Per riutilizzare l'oggetto, chiamare CWorkerThread::Initialize dopo aver chiamato questo metodo.
Si noti che la chiamata Shutdown
a un oggetto inizializzato con un puntatore a un altro CWorkerThread
oggetto non ha alcun effetto e restituisce sempre S_OK.
Vedi anche
DefaultThreadTraits
Classi
Multithreading: creazione di thread di lavoro
Interfaccia IWorkerThreadClient