Freigeben über


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

  1. Erstellen Sie eine Instanz dieser Klasse.

  2. Rufen Sie CWorkerThread::Initialize auf.

  3. 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.

  4. Implementieren Sie IWorkerThreadClient::Execute , um eine Aktion auszuführen, wenn das Handle oder der Timer signalisiert wird.

  5. Um ein Objekt aus der Liste der wartenden Objekte zu entfernen, rufen Sie CWorkerThread::RemoveHandle auf.

  6. 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