Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Knihovna ATL (Active Template Library) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.
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í