Sdílet prostřednictvím


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

  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í