Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Deze klasse biedt een groep werkthreads die een wachtrij met werkitems verwerken.
Syntaxis
template <class Worker, class ThreadTraits = DefaultThreadTraits>
class CThreadPool : public IThreadPoolConfig
Parameterwaarden
Arbeider
De klasse die voldoet aan het archetype van de werkrol die de code levert die wordt gebruikt voor het verwerken van werkitems in de wachtrij in de threadgroep.
ThreadTraits
De klasse die de functie levert die wordt gebruikt om de threads in de pool te maken.
Leden
Openbare constructors
| Naam | Description |
|---|---|
| CThreadPool::CThreadPool | De constructor voor de threadpool. |
| CThreadPool::~CThreadPool | De destructor voor de threadpool. |
Openbare methoden
| Naam | Description |
|---|---|
| CThreadPool::AddRef | Implementatie van IUnknown::AddRef. |
| CThreadPool::GetNumThreads | Roep deze methode aan om het aantal threads in de pool op te halen. |
| CThreadPool::GetQueueHandle | Roep deze methode aan om de ingang op te halen van de IO-voltooiingspoort die wordt gebruikt om werkitems in de wachtrij te plaatsen. |
| CThreadPool::GetSize | Roep deze methode aan om het aantal threads in de pool op te halen. |
| CThreadPool::GetTimeout | Roep deze methode aan om de maximale tijd in milliseconden te krijgen die de threadgroep wacht totdat een thread is afgesloten. |
| CThreadPool::Initialiseren | Roep deze methode aan om de threadgroep te initialiseren. |
| CThreadPool::QueryInterface | Implementatie van IUnknown::QueryInterface. |
| CThreadPool::QueueRequest | Roep deze methode aan om een werkitem in de wachtrij te plaatsen dat moet worden verwerkt door een thread in de pool. |
| CThreadPool::Release | Implementatie van IUnknown::Release. |
| CThreadPool::SetSize | Roep deze methode aan om het aantal threads in de pool in te stellen. |
| CThreadPool::SetTimeout | Roep deze methode aan om de maximale tijd in milliseconden in te stellen die de threadgroep wacht tot een thread is afgesloten. |
| CThreadPool::Afsluiten | Roep deze methode aan om de threadgroep af te sluiten. |
Opmerkingen
Threads in de pool worden gemaakt en vernietigd wanneer de pool wordt geïnitialiseerd, gewijzigd of afgesloten. Er wordt een exemplaar van class Worker gemaakt op de stack van elke werkrolthread in de pool. Elk exemplaar leeft gedurende de levensduur van de thread.
Onmiddellijk na het maken van een thread wordt Worker::Initialize aangeroepen op het object dat aan die thread is gekoppeld. Onmiddellijk voordat een thread wordt vernietigd, wordt Worker::Terminate aangeroepen. Beide methoden moeten een void* argument accepteren. De waarde van dit argument wordt doorgegeven aan de threadpool via de parameter pvWorkerParam van CThreadPool::Initialize.
Wanneer er werkitems in de wachtrij en werkrolthreads beschikbaar zijn voor werk, haalt een werkthread een item uit de wachtrij en roept u de Execute methode van het Worker-object voor die thread aan. Er worden vervolgens drie items doorgegeven aan de methode: het item uit de wachtrij, hetzelfde pvWorkerParam dat wordt doorgegeven aan Worker:: Initialize en Worker:: Terminateen een aanwijzer naar de overlappende structuur die wordt gebruikt voor de wachtrij met io-voltooiingspoorten.
De werkrolklasse declareert het type van de items die in de wachtrij worden geplaatst in de threadgroep door een typedef, Worker:: RequestTypeop te geven. Dit type moet kunnen worden gegoten naar en van een ULONG_PTR.
Een voorbeeld van een werkrolklasse is CNonStatelessWorker Class.
Overnamehiërarchie
IUnknown
CThreadPool
Requirements
Header: atlutil.h
CThreadPool::AddRef
Implementatie van IUnknown::AddRef.
ULONG STDMETHODCALLTYPE AddRef() throw();
Retourwaarde
Geeft altijd 1 terug.
Opmerkingen
Deze klasse implementeert geen levensduurbeheer met verwijzing tellen.
CThreadPool::CThreadPool
De constructor voor de threadpool.
CThreadPool() throw();
Opmerkingen
Initialiseert de time-outwaarde tot ATLS_DEFAULT_THREADPOOLSHUTDOWNTIMEOUT. De standaardtijd is 36 seconden. Indien nodig kunt u uw eigen positieve gehele getal voor dit symbool definiëren voordat u atlutil.h opgeeft.
CThreadPool::~CThreadPool
De destructor voor de threadpool.
~CThreadPool() throw();
Opmerkingen
Roept CThreadPool::Shutdown aan.
CThreadPool::GetNumThreads
Roep deze methode aan om het aantal threads in de pool op te halen.
int GetNumThreads() throw();
Retourwaarde
Retourneert het aantal threads in de pool.
CThreadPool::GetQueueHandle
Roep deze methode aan om de ingang op te halen van de IO-voltooiingspoort die wordt gebruikt om werkitems in de wachtrij te plaatsen.
HANDLE GetQueueHandle() throw();
Retourwaarde
Retourneert de wachtrijgreep of NULL als de threadgroep niet is geïnitialiseerd.
CThreadPool::GetSize
Roep deze methode aan om het aantal threads in de pool op te halen.
HRESULT STDMETHODCALLTYPE GetSize(int* pnNumThreads) throw();
Parameterwaarden
pnNumThreads
[uit] Adres van de variabele die bij succes het aantal threads in de pool ontvangt.
Retourwaarde
Retourneert S_OK bij succes of een fout HRESULT bij fout.
CThreadPool::GetTimeout
Roep deze methode aan om de maximale tijd in milliseconden te krijgen die de threadgroep wacht totdat een thread is afgesloten.
HRESULT STDMETHODCALLTYPE GetTimeout(DWORD* pdwMaxWait) throw();
Parameterwaarden
pdwMaxWait
[uit] Adres van de variabele die, bij succes, de maximale tijd ontvangt in milliseconden dat de threadgroep wacht tot een thread is afgesloten.
Retourwaarde
Retourneert S_OK bij succes of een fout HRESULT bij fout.
Opmerkingen
Deze time-outwaarde wordt gebruikt door CThreadPool::Shutdown als er geen andere waarde wordt opgegeven voor die methode.
CThreadPool::Initialiseren
Roep deze methode aan om de threadgroep te initialiseren.
HRESULT Initialize(
void* pvWorkerParam = NULL,
int nNumThreads = 0,
DWORD dwStackSize = 0,
HANDLE hCompletion = INVALID_HANDLE_VALUE) throw();
Parameterwaarden
pvWorkerParam
De werkrolparameter die moet worden doorgegeven aan de werkrolthreadobjecten InitializeExecuteen Terminate methoden.
nNumThreads
Het aangevraagde aantal threads in de pool.
Als nNumThreads negatief is, wordt de absolute waarde vermenigvuldigd met het aantal processors in de machine om het totale aantal threads op te halen.
Als nNumThreads nul is, wordt ATLS_DEFAULT_THREADSPERPROC vermenigvuldigd met het aantal processors op de computer om het totale aantal threads op te halen. De standaardwaarde is 2 threads per processor. Indien nodig kunt u uw eigen positieve gehele getal voor dit symbool definiëren voordat u atlutil.h opgeeft.
dwStackSize
De stapelgrootte voor elke thread in de pool.
hCompletion
De ingang van een object dat moet worden gekoppeld aan de voltooiingspoort.
Retourwaarde
Retourneert S_OK bij succes of een fout HRESULT bij fout.
CThreadPool::QueryInterface
Implementatie van IUnknown::QueryInterface.
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv) throw();
Opmerkingen
Objecten van deze klasse kunnen worden opgevraagd voor de IUnknown interfaces IThreadPoolConfig .
CThreadPool::QueueRequest
Roep deze methode aan om een werkitem in de wachtrij te plaatsen dat moet worden verwerkt door een thread in de pool.
BOOL QueueRequest(Worker::RequestType request) throw();
Parameterwaarden
verzoek
De aanvraag die in de wachtrij moet worden geplaatst.
Retourwaarde
Retourneert TRUE bij succes, ONWAAR bij mislukt.
Opmerkingen
Met deze methode wordt een werkitem aan de wachtrij toegevoegd. De threads in de pool kiezen items uit de wachtrij in de volgorde waarin ze worden ontvangen.
CThreadPool::Release
Implementatie van IUnknown::Release.
ULONG STDMETHODCALLTYPE Release() throw();
Retourwaarde
Geeft altijd 1 terug.
Opmerkingen
Deze klasse implementeert geen levensduurbeheer met verwijzing tellen.
CThreadPool::SetSize
Roep deze methode aan om het aantal threads in de pool in te stellen.
HRESULT STDMETHODCALLTYPE SetSize(int nNumThreads) throw();
Parameterwaarden
nNumThreads
Het aangevraagde aantal threads in de pool.
Als nNumThreads negatief is, wordt de absolute waarde vermenigvuldigd met het aantal processors in de machine om het totale aantal threads op te halen.
Als nNumThreads nul is, wordt ATLS_DEFAULT_THREADSPERPROC vermenigvuldigd met het aantal processors op de computer om het totale aantal threads op te halen. De standaardwaarde is 2 threads per processor. Indien nodig kunt u uw eigen positieve gehele getal voor dit symbool definiëren voordat u atlutil.h opgeeft.
Retourwaarde
Retourneert S_OK bij succes of een fout HRESULT bij fout.
Opmerkingen
Als het aantal opgegeven threads kleiner is dan het aantal threads dat zich momenteel in de groep bevindt, plaatst het object een afsluitbericht in de wachtrij dat moet worden opgehaald door een wachtende thread. Wanneer een wachtende thread het bericht uit de wachtrij haalt, wordt de threadgroep op de hoogte gesteld en wordt de threadprocedure afgesloten. Dit proces wordt herhaald totdat het aantal threads in de pool het opgegeven nummer bereikt of totdat er geen thread is afgesloten binnen de periode die is opgegeven door GetTimeout/ SetTimeout. In deze situatie retourneert de methode een HRESULT die overeenkomt met WAIT_TIMEOUT en wordt het bericht voor afsluiten in behandeling geannuleerd.
CThreadPool::SetTimeout
Roep deze methode aan om de maximale tijd in milliseconden in te stellen die de threadgroep wacht tot een thread is afgesloten.
HRESULT STDMETHODCALLTYPE SetTimeout(DWORD dwMaxWait) throw();
Parameterwaarden
dwMaxWait
De aangevraagde maximale tijd in milliseconden dat de threadpool wacht tot een thread is afgesloten.
Retourwaarde
Retourneert S_OK bij succes of een fout HRESULT bij fout.
Opmerkingen
De time-out wordt geïnitialiseerd voor ATLS_DEFAULT_THREADPOOLSHUTDOWNTIMEOUT. De standaardtijd is 36 seconden. Indien nodig kunt u uw eigen positieve gehele getal voor dit symbool definiëren voordat u atlutil.h opgeeft.
Houd er rekening mee dat dwMaxWait de tijd is waarop de pool wacht tot één thread is afgesloten. De maximale tijd die kan worden genomen om meerdere threads uit de pool te verwijderen, kan iets kleiner zijn dan dwMaxWait vermenigvuldigd met het aantal threads.
CThreadPool::Afsluiten
Roep deze methode aan om de threadgroep af te sluiten.
void Shutdown(DWORD dwMaxWait = 0) throw();
Parameterwaarden
dwMaxWait
De aangevraagde maximale tijd in milliseconden dat de threadpool wacht tot een thread is afgesloten. Als er 0 of geen waarde wordt opgegeven, gebruikt deze methode de time-out die is ingesteld door CThreadPool::SetTimeout.
Opmerkingen
Met deze methode wordt een afsluitaanvraag op alle threads in de pool geplaatst. Als de time-out verloopt, roept deze methode TerminateThread aan op een thread die niet is afgesloten. Deze methode wordt automatisch aangeroepen vanuit de destructor van de klasse.