Delen via


CWorkerThread-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze klasse maakt een werkrolthread of maakt gebruik van een bestaande thread, wacht op een of meer kernelobjectingangen en voert een opgegeven clientfunctie uit wanneer een van de ingangen wordt gesignaleerd.

Belangrijk

Deze klasse en de bijbehorende leden kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.

Syntaxis

template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread

Parameterwaarden

ThreadTraits
De klasse die de functie voor het maken van threads biedt, zoals CRTThreadTraits of Win32ThreadTraits.

Leden

Beveiligde structuren

Naam Description
WorkerClientEntry

Openbare constructors

Naam Description
CWorkerThread::CWorkerThread De constructor voor de werkrolthread.
CWorkerThread::~CWorkerThread De destructor voor de werkrolthread.

Openbare methoden

Naam Description
CWorkerThread::AddHandle Roep deze methode aan om de ingang van een wachtbaar object toe te voegen aan de lijst die wordt onderhouden door de werkrolthread.
CWorkerThread::AddTimer Roep deze methode aan om een periodieke wachttijdtimer toe te voegen aan de lijst die wordt onderhouden door de werkrolthread.
CWorkerThread::GetThreadHandle Roep deze methode aan om de threadgreep van de werkrolthread op te halen.
CWorkerThread::GetThreadId Roep deze methode aan om de thread-id van de werkrolthread op te halen.
CWorkerThread::Initialize Roep deze methode aan om de werkrolthread te initialiseren.
CWorkerThread::RemoveHandle Roep deze methode aan om een ingang te verwijderen uit de lijst met wachtbare objecten.
CWorkerThread::Afsluiten Roep deze methode aan om de werkrolthread af te sluiten.

Opmerkingen

CWorkerThread gebruiken

  1. Maak een exemplaar van deze klasse.

  2. Roep CWorkerThread::Initialize aan.

  3. CWorkerThread::AddHandle aanroepen met de ingang van een kernelobject en een aanwijzer naar een implementatie van IWorkerThreadClient.

    - of -

    CWorkerThread::AddTimer aanroepen met een aanwijzer naar een implementatie van IWorkerThreadClient.

  4. Implementeer IWorkerThreadClient::Voer uit om actie te ondernemen wanneer de ingang of timer wordt gesignaleerd.

  5. Als u een object uit de lijst met wachtbare objecten wilt verwijderen, roept u CWorkerThread::RemoveHandle aan.

  6. Als u de thread wilt beëindigen, roept u CWorkerThread::Shutdown aan.

Requirements

Header: atlutil.h

CWorkerThread::AddHandle

Roep deze methode aan om de ingang van een wachtbaar object toe te voegen aan de lijst die wordt onderhouden door de werkrolthread.

HRESULT AddHandle(
    HANDLE hObject,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam) throw();

Parameterwaarden

hObject
De ingang naar een wachtbaar object.

pClient
De aanwijzer naar de IWorkerThreadClient-interface van het object dat moet worden aangeroepen wanneer de ingang wordt gesignaleerd.

dwParam
De parameter die moet worden doorgegeven aan IWorkerThreadClient::Execute when the handle is signaled.

Retourwaarde

Retourneert S_OK bij succes of een fout HRESULT bij fout.

Opmerkingen

IWorkerThreadClient::Execute wordt aangeroepen via pClient wanneer de ingang, hObject, wordt gesignaleerd.

CWorkerThread::AddTimer

Roep deze methode aan om een periodieke wachttijdtimer toe te voegen aan de lijst die wordt onderhouden door de werkrolthread.

HRESULT AddTimer(
    DWORD dwInterval,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam,
    HANDLE* phTimer) throw();

Parameterwaarden

dwInterval
Hiermee geeft u de periode van de timer in milliseconden.

pClient
De aanwijzer naar de IWorkerThreadClient-interface van het object dat moet worden aangeroepen wanneer de ingang wordt gesignaleerd.

dwParam
De parameter die moet worden doorgegeven aan IWorkerThreadClient::Execute when the handle is signaled.

phTimer
[uit] Adres van de HANDLE-variabele die bij succes de ingang ontvangt voor de zojuist gemaakte timer.

Retourwaarde

Retourneert S_OK bij succes of een fout HRESULT bij fout.

Opmerkingen

IWorkerThreadClient::Execute wordt aangeroepen via pClient wanneer de timer wordt gesignaleerd.

Geef de timergreep van phTimer door aan CWorkerThread::RemoveHandle om de timer te sluiten.

CWorkerThread::CWorkerThread

De constructor.

CWorkerThread() throw();

CWorkerThread::~CWorkerThread

De destructor.

~CWorkerThread() throw();

Opmerkingen

Roept CWorkerThread::Shutdown aan.

CWorkerThread::GetThreadHandle

Roep deze methode aan om de threadgreep van de werkrolthread op te halen.

HANDLE GetThreadHandle() throw();

Retourwaarde

Retourneert de threadgreep of NULL als de werkrolthread niet is geïnitialiseerd.

CWorkerThread::GetThreadId

Roep deze methode aan om de thread-id van de werkrolthread op te halen.

DWORD GetThreadId() throw();

Retourwaarde

Retourneert de thread-id of NULL als de werkrolthread niet is geïnitialiseerd.

CWorkerThread::Initialize

Roep deze methode aan om de werkrolthread te initialiseren.

HRESULT Initialize() throw();

HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();

Parameterwaarden

pThread
Een bestaande werkrolthread.

Retourwaarde

Retourneert S_OK bij succes of een fout HRESULT bij fout.

Opmerkingen

Deze methode moet worden aangeroepen om het object te initialiseren na het maken of na een aanroep naar CWorkerThread::Shutdown.

Als u twee of meer CWorkerThread objecten dezelfde werkthread wilt gebruiken, initialiseert u een van deze objecten zonder argumenten door te geven en geeft u een aanwijzer door aan dat object aan de Initialize methoden van de andere objecten. De objecten die zijn geïnitialiseerd met behulp van de aanwijzer, moeten worden afgesloten voordat het object wordt geïnitialiseerd.

Zie CWorkerThread::Shutdown voor informatie over hoe het gedrag van die methode verandert wanneer deze wordt geïnitialiseerd met behulp van een aanwijzer naar een bestaand object.

CWorkerThread::RemoveHandle

Roep deze methode aan om een ingang te verwijderen uit de lijst met wachtbare objecten.

HRESULT RemoveHandle(HANDLE hObject) throw();

Parameterwaarden

hObject
De greep die moet worden verwijderd.

Retourwaarde

Retourneert S_OK bij succes of een fout HRESULT bij fout.

Opmerkingen

Wanneer de ingang is verwijderd , wordt IWorkerThreadClient::CloseHandle aangeroepen op het bijbehorende object dat is doorgegeven aan AddHandle. Als deze aanroep mislukt, CWorkerThread roept u de Windows CloseHandle-functie aan in de ingang.

CWorkerThread::Afsluiten

Roep deze methode aan om de werkrolthread af te sluiten.

HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();

Parameterwaarden

dwWait
De tijd in milliseconden om te wachten totdat de werkrolthread is afgesloten. ATL_WORKER_THREAD_WAIT is standaard ingesteld op 10 seconden. Indien nodig kunt u uw eigen waarde voor dit symbool definiëren voordat u atlutil.h opgeeft.

Retourwaarde

Retourneert S_OK over succes of een fout HRESULT bij fouten, bijvoorbeeld als de time-outwaarde, dwWait, wordt overschreden.

Opmerkingen

Als u het object opnieuw wilt gebruiken, roept u CWorkerThread::Initialize aan nadat u deze methode hebt aangeroepen.

Houd er rekening mee dat het aanroepen van Shutdown een object dat is geïnitialiseerd met een aanwijzer naar een ander CWorkerThread object, geen effect heeft en altijd S_OK retourneert.

Zie ook

DefaultThreadTraits
Klassen
Multithreading: Werkdraden maken
IWorkerThreadClient Interface