CWorkerThread – třída
Tato třída vytvoří pracovní vlákno nebo používá existující vlákno, čeká na jeden nebo více popisovačů objektu jádra a spustí zadanou klientskou funkci při signálu jednoho z popisovačů.
Důležité
Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.
Syntaxe
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Parametry
ThreadTraits
Třída poskytující funkci vytvoření vlákna, například CRTThreadTraits nebo Win32ThreadTraits.
Členové
Chráněné struktury
Název | Popis |
---|---|
WorkerClientEntry |
Veřejné konstruktory
Název | Popis |
---|---|
CWorkerThread::CWorkerThread | Konstruktor pro pracovní vlákno. |
CWorkerThread::~CWorkerThread | Destruktor pracovního vlákna. |
Veřejné metody
Název | Popis |
---|---|
CWorkerThread::AddHandle | Voláním této metody přidáte popisovač čekaného objektu do seznamu spravovaného pracovním vláknem. |
CWorkerThread::AddTimer | Voláním této metody přidáte do seznamu udržovaného pracovním vláknem pravidelný čekací časovač. |
CWorkerThread::GetThreadHandle | Voláním této metody získáte popisovač vlákna pracovního vlákna. |
CWorkerThread::GetThreadId | Voláním této metody získáte ID vlákna pracovního vlákna. |
CWorkerThread::Initialize | Voláním této metody inicializuje pracovní vlákno. |
CWorkerThread::RemoveHandle | Voláním této metody odeberete popisovač ze seznamu čekajících objektů. |
CWorkerThread::Shutdown | Voláním této metody ukončete pracovní vlákno. |
Poznámky
Použití CWorkerThread
Vytvořte instanci této třídy.
Volání CWorkerThread::Initialize.
Volání CWorkerThread::AddHandle s popisovačem objektu jádra a ukazatelem na implementaci IWorkerThreadClient.
- nebo -
Volání CWorkerThread::AddTimer s ukazatelem na implementaci IWorkerThreadClient.
Implementace IWorkerThreadClient::Execute provést nějakou akci, když je popisovač nebo časovač signalován.
Chcete-li odebrat objekt ze seznamu čekajících objektů, zavolejte CWorkerThread::RemoveHandle.
Chcete-li ukončit vlákno, zavolejte CWorkerThread::Shutdown.
Požadavky
Hlavička: atlutil.h
CWorkerThread::AddHandle
Voláním této metody přidáte popisovač čekaného objektu do seznamu spravovaného pracovním vláknem.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Parametry
hObject
Popisovač do čekaného objektu.
pClient
Ukazatel na rozhraní IWorkerThreadClient u objektu, který má být volán při signálu popisovače.
dwParam
Parametr, který se má předat IWorkerThreadClient ::Execute při signálu popisovače.
Návratová hodnota
Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.
Poznámky
IWorkerThreadClient::Execute bude volán prostřednictvím pClient, když je popisovač hObject signalován.
CWorkerThread::AddTimer
Voláním této metody přidáte do seznamu udržovaného pracovním vláknem pravidelný čekací časovač.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
Parametry
dwInterval
Určuje období časovače v milisekundách.
pClient
Ukazatel na rozhraní IWorkerThreadClient u objektu, který má být volán při signálu popisovače.
dwParam
Parametr, který se má předat IWorkerThreadClient ::Execute při signálu popisovače.
PhTimer
[ven] Adresa proměnné HANDLE, která při úspěchu obdrží popisovač nově vytvořenému časovači.
Návratová hodnota
Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.
Poznámky
IWorkerThreadClient::Execute bude volán prostřednictvím pClient , když je časovač signalován.
Předejte popisovač časovače z phTimer do CWorkerThread::RemoveHandle pro zavření časovače.
CWorkerThread::CWorkerThread
Konstruktor
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
Destruktor.
~CWorkerThread() throw();
Poznámky
Volá CWorkerThread::Shutdown.
CWorkerThread::GetThreadHandle
Voláním této metody získáte popisovač vlákna pracovního vlákna.
HANDLE GetThreadHandle() throw();
Návratová hodnota
Vrátí popisovač vlákna nebo hodnotu NULL, pokud pracovní vlákno nebylo inicializováno.
CWorkerThread::GetThreadId
Voláním této metody získáte ID vlákna pracovního vlákna.
DWORD GetThreadId() throw();
Návratová hodnota
Vrátí ID vlákna nebo HODNOTU NULL, pokud pracovní vlákno nebylo inicializováno.
CWorkerThread::Initialize
Voláním této metody inicializuje pracovní vlákno.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Parametry
pThread
Existující pracovní vlákno.
Návratová hodnota
Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.
Poznámky
Tato metoda by měla být volána k inicializaci objektu po vytvoření nebo po volání CWorkerThread::Shutdown.
Pokud chcete, aby dva nebo více CWorkerThread
objektů používalo stejné pracovní vlákno, inicializujte jeden z nich bez předání argumentů a pak předejte ukazatel na tento objekt Initialize
metodám ostatních. Objekty inicializované pomocí ukazatele by měly být před inicializací objektu použitého k inicializaci vypnuty.
CWorkerThread::RemoveHandle
Voláním této metody odeberete popisovač ze seznamu čekajících objektů.
HRESULT RemoveHandle(HANDLE hObject) throw();
Parametry
hObject
Popisovač, který chcete odebrat.
Návratová hodnota
Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.
Poznámky
Při odebrání popisovače IWorkerThreadClient::CloseHandle bude volána u přidruženého objektu, který byl předán Do AddHandle. Pokud toto volání selže, CWorkerThread
zavolá funkci Windows CloseHandle na popisovači.
CWorkerThread::Shutdown
Voláním této metody ukončete pracovní vlákno.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Parametry
dwWait
Doba v milisekundách počkejte, než se pracovní vlákno vypne. ATL_WORKER_THREAD_WAIT výchozí hodnota je 10 sekund. V případě potřeby můžete před zahrnutím souboru atlutil.h definovat vlastní hodnotu pro tento symbol.
Návratová hodnota
Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání, například pokud je překročena hodnota časového limitu dwWait.
Poznámky
Chcete-li znovu použít objekt, zavolejte CWorkerThread::Initialize po volání této metody.
Všimněte si, že volání Shutdown
objektu inicializovaného ukazatelem na jiný CWorkerThread
objekt nemá žádný vliv a vždy vrací S_OK.
Viz také
DefaultThreadTraits
Třídy
Multithreading: Vytváření pracovních vláken
IWorkerThreadClient – rozhraní