Sdílet prostřednictvím


CWorkerThread – třída

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

  1. Vytvořte instanci této třídy.

  2. Volání CWorkerThread::Initialize.

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

  4. Implementace IWorkerThreadClient::Execute provést nějakou akci, když je popisovač nebo časovač signalován.

  5. Chcete-li odebrat objekt ze seznamu čekajících objektů, zavolejte CWorkerThread::RemoveHandle.

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

Informace o tom, jak se chování této metody mění při inicializaci pomocí ukazatele na existující objekt, najdete v tématu CWorkerThread::Shutdown .

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í