CWorkerThread-Klasse
Diese Klasse erstellt einen Workerthread oder verwendet einen vorhandenen Thread, wartet auf einen oder mehrere Kernelobjekthandles und führt eine angegebene Clientfunktion aus, wenn einer der Handles signalisiert wird.
Wichtig
Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.
Syntax
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Parameter
Threadeigenschaften
Die Klasse, die die Threaderstellungsfunktion bereitstellt, z. B. CRTThreadTraits oder Win32ThreadTraits.
Member
Geschützte Strukturen
Name | Beschreibung |
---|---|
WorkerClientEntry |
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CWorkerThread::CWorkerThread | Der Konstruktor für den Workerthread. |
CWorkerThread::~CWorkerThread | Der Destruktor für den Arbeitsthread. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CWorkerThread::AddHandle | Rufen Sie diese Methode auf, um der Liste, die vom Arbeitsthread verwaltet wird, ein Handle eines abwartbaren Objekts hinzuzufügen. |
CWorkerThread::AddTimer | Rufen Sie diese Methode auf, um der Liste, die vom Arbeitsthread verwaltet wird, einen regelmäßigen Zeitgeber mit Wartemöglichkeit hinzuzufügen. |
CWorkerThread::GetThreadHandle | Rufen Sie diese Methode auf, um den Threadhandle des Workerthreads abzurufen. |
CWorkerThread::GetThreadId | Rufen Sie diese Methode auf, um die Thread-ID des Workerthreads abzurufen. |
CWorkerThread::Initialize | Rufen Sie diese Methode auf, um den Workerthread zu initialisieren. |
CWorkerThread::RemoveHandle | Rufen Sie diese Methode auf, um ein Handle aus der Liste der wartenden Objekte zu entfernen. |
CWorkerThread::Shutdown | Rufen Sie diese Methode auf, um den Arbeitsthread herunterzufahren. |
Hinweise
So verwenden Sie CWorkerThread
Erstellen Sie eine Instanz dieser Klasse.
Rufen Sie CWorkerThread::Initialize auf.
Rufen Sie CWorkerThread::AddHandle mit dem Handle eines Kernelobjekts und einem Zeiger auf eine Implementierung von IWorkerThreadClient auf.
- oder -
Rufen Sie CWorkerThread::AddTimer mit einem Zeiger auf eine Implementierung von IWorkerThreadClient auf.
Implementieren Sie IWorkerThreadClient::Execute , um eine Aktion auszuführen, wenn das Handle oder der Timer signalisiert wird.
Um ein Objekt aus der Liste der wartenden Objekte zu entfernen, rufen Sie CWorkerThread::RemoveHandle auf.
Rufen Sie zum Beenden des Threads CWorkerThread::Shutdown auf.
Anforderungen
Header: atlutil.h
CWorkerThread::AddHandle
Rufen Sie diese Methode auf, um der Liste, die vom Arbeitsthread verwaltet wird, ein Handle eines abwartbaren Objekts hinzuzufügen.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Parameter
hObject
Das Handle für ein wartebares Objekt.
pClient
Der Zeiger auf die IWorkerThreadClient-Schnittstelle für das Objekt, das aufgerufen werden soll, wenn der Handle signalisiert wird.
dwParam
Der Parameter, der an IWorkerThreadClient::Execute übergeben werden soll, wenn das Handle signalisiert wird.
Rückgabewert
S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.
Hinweise
IWorkerThreadClient::Execute wird über pClient aufgerufen, wenn das Handle hObject signalisiert wird.
CWorkerThread::AddTimer
Rufen Sie diese Methode auf, um der Liste, die vom Arbeitsthread verwaltet wird, einen regelmäßigen Zeitgeber mit Wartemöglichkeit hinzuzufügen.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
Parameter
dwInterval
Gibt den Zeitraum des Timers in Millisekunden an.
pClient
Der Zeiger auf die IWorkerThreadClient-Schnittstelle für das Objekt, das aufgerufen werden soll, wenn der Handle signalisiert wird.
dwParam
Der Parameter, der an IWorkerThreadClient::Execute übergeben werden soll, wenn das Handle signalisiert wird.
phTimer
[out] Adresse der HANDLE-Variable, die bei Erfolg das Handle an den neu erstellten Timer empfängt.
Rückgabewert
S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.
Hinweise
IWorkerThreadClient::Execute wird über pClient aufgerufen, wenn der Timer signalisiert wird.
Übergeben Sie das Zeitgeberhandle von phTimer an CWorkerThread::RemoveHandle , um den Timer zu schließen.
CWorkerThread::CWorkerThread
Der Konstruktor.
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
Der Destruktor.
~CWorkerThread() throw();
Hinweise
Ruft CWorkerThread::Shutdown auf.
CWorkerThread::GetThreadHandle
Rufen Sie diese Methode auf, um den Threadhandle des Workerthreads abzurufen.
HANDLE GetThreadHandle() throw();
Rückgabewert
Gibt das Threadhandle oder NULL zurück, wenn der Workerthread nicht initialisiert wurde.
CWorkerThread::GetThreadId
Rufen Sie diese Methode auf, um die Thread-ID des Workerthreads abzurufen.
DWORD GetThreadId() throw();
Rückgabewert
Gibt die Thread-ID oder NULL zurück, wenn der Workerthread nicht initialisiert wurde.
CWorkerThread::Initialize
Rufen Sie diese Methode auf, um den Workerthread zu initialisieren.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Parameter
pThread
Ein vorhandener Workerthread.
Rückgabewert
S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.
Hinweise
Diese Methode sollte aufgerufen werden, um das Objekt nach der Erstellung oder nach einem Aufruf von CWorkerThread::Shutdown zu initialisieren.
Wenn zwei oder mehr CWorkerThread
Objekte denselben Arbeitsthread verwenden möchten, initialisieren Sie einen davon, ohne dass Argumente übergeben werden, und übergeben Sie dann einen Zeiger auf dieses Objekt an die Initialize
Methoden der anderen. Die objekte, die mit dem Zeiger initialisiert wurden, sollten heruntergefahren werden, bevor das objekt verwendet wird, um sie zu initialisieren.
Informationen dazu, wie sich das Verhalten dieser Methode ändert, wenn sie mit einem Zeiger auf ein vorhandenes Objekt initialisiert wird, finden Sie unter "CWorkerThread::Shutdown ".
CWorkerThread::RemoveHandle
Rufen Sie diese Methode auf, um ein Handle aus der Liste der wartenden Objekte zu entfernen.
HRESULT RemoveHandle(HANDLE hObject) throw();
Parameter
hObject
Der zu entfernende Ziehpunkt.
Rückgabewert
S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.
Hinweise
Wenn das Handle entfernt wird, wird IWorkerThreadClient::CloseHandle für das zugeordnete Objekt aufgerufen, das an AddHandle übergeben wurde. Wenn dieser Aufruf fehlschlägt, CWorkerThread
wird die Windows CloseHandle-Funktion auf dem Handle aufgerufen.
CWorkerThread::Shutdown
Rufen Sie diese Methode auf, um den Arbeitsthread herunterzufahren.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Parameter
dwWait
Die Zeit in Millisekunden, bis der Arbeitsthread heruntergefahren wird. ATL_WORKER_THREAD_WAIT wird standardmäßig auf 10 Sekunden festgelegt. Bei Bedarf können Sie ihren eigenen Wert für dieses Symbol definieren, bevor Sie atlutil.h einschließen.
Rückgabewert
Gibt S_OK bei Erfolg zurück oder ein HRESULT-Fehler beim Fehler, z. B. wenn der Timeoutwert dwWait überschritten wird.
Hinweise
Rufen Sie CWorkerThread::Initialize nach dem Aufrufen dieser Methode auf, um das Objekt wiederzuverwenden.
Beachten Sie, dass das Aufrufen Shutdown
eines Objekts, das mit einem Zeiger auf ein anderes CWorkerThread
Objekt initialisiert wurde, keine Auswirkung hat und immer S_OK zurückgibt.
Siehe auch
DefaultThreadTraits
Klassen
Multithreading: Erstellen von Arbeitsthreads
IWorkerThreadClient-Schnittstelle