Udostępnij za pośrednictwem


Klasa CWorkerThread

Ta klasa tworzy wątek procesu roboczego lub używa istniejącego, czeka na co najmniej jeden uchwyt obiektu jądra i wykonuje określoną funkcję klienta, gdy jeden z dojść jest sygnalizowany.

Ważne

Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.

Składnia

template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread

Parametry

ThreadTraits
Klasa dostarczająca funkcję tworzenia wątku, taką jak CRTThreadTraits lub Win32ThreadTraits.

Członkowie

Chronione struktury

Nazwa/nazwisko opis
WorkerClientEntry

Konstruktory publiczne

Nazwa/nazwisko opis
CWorkerThread::CWorkerThread Konstruktor wątku roboczego.
CWorkerThread::~CWorkerThread Destruktor wątku roboczego.

Metody publiczne

Nazwa/nazwisko opis
CWorkerThread::AddHandle Wywołaj tę metodę, aby dodać uchwyt obiektu oczekiwania do listy obsługiwanej przez wątek procesu roboczego.
CWorkerThread::AddTimer Wywołaj tę metodę, aby dodać okresowy czasomierz oczekiwania do listy obsługiwanej przez wątek procesu roboczego.
CWorkerThread::GetThreadHandle Wywołaj tę metodę, aby uzyskać dojście wątku roboczego.
CWorkerThread::GetThreadId Wywołaj tę metodę, aby uzyskać identyfikator wątku procesu roboczego.
CWorkerThread::Initialize Wywołaj tę metodę, aby zainicjować wątek procesu roboczego.
CWorkerThread::RemoveHandle Wywołaj tę metodę, aby usunąć uchwyt z listy obiektów oczekujących.
CWorkerThread::Shutdown Wywołaj tę metodę, aby zamknąć wątek procesu roboczego.

Uwagi

Aby użyć CWorkerThread

  1. Utwórz wystąpienie tej klasy.

  2. Wywołaj metodę CWorkerThread::Initialize.

  3. Wywołaj metodę CWorkerThread::AddHandle z uchwytem obiektu jądra i wskaźnikiem do implementacji elementu IWorkerThreadClient.

    - lub -

    Wywołaj element CWorkerThread::AddTimer ze wskaźnikiem do implementacji elementu IWorkerThreadClient.

  4. Zaimplementuj element IWorkerThreadClient::Wykonaj , aby wykonać jakąś akcję w przypadku zasygnaliowania uchwytu lub czasomierza.

  5. Aby usunąć obiekt z listy obiektów oczekujących, wywołaj metodę CWorkerThread::RemoveHandle.

  6. Aby zakończyć wątek, wywołaj metodę CWorkerThread::Shutdown.

Wymagania

Nagłówek: atlutil.h

CWorkerThread::AddHandle

Wywołaj tę metodę, aby dodać uchwyt obiektu oczekiwania do listy obsługiwanej przez wątek procesu roboczego.

HRESULT AddHandle(
    HANDLE hObject,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam) throw();

Parametry

hObject
Uchwyt do obiektu, który można czekać.

pClient
Wskaźnik do interfejsu IWorkerThreadClient w obiekcie, który ma być wywoływany, gdy uchwyt jest sygnalizowany.

dwParam
Parametr, który ma zostać przekazany do elementu IWorkerThreadClient::Execute , gdy dojście zostanie zasygnalizowane.

Wartość zwracana

Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.

Uwagi

IWorkerThreadClient::Execute zostanie wywołany za pośrednictwem elementu pClient , gdy zostanie zasygnalizowana obsługa obiektu hObject.

CWorkerThread::AddTimer

Wywołaj tę metodę, aby dodać okresowy czasomierz oczekiwania do listy obsługiwanej przez wątek procesu roboczego.

HRESULT AddTimer(
    DWORD dwInterval,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam,
    HANDLE* phTimer) throw();

Parametry

dwInterval
Określa okres czasomierza w milisekundach.

pClient
Wskaźnik do interfejsu IWorkerThreadClient w obiekcie, który ma być wywoływany, gdy uchwyt jest sygnalizowany.

dwParam
Parametr, który ma zostać przekazany do elementu IWorkerThreadClient::Execute , gdy dojście zostanie zasygnalizowane.

phTimer
[out] Adres zmiennej HANDLE, która po powodzeniu odbiera dojście do nowo utworzonego czasomierza.

Wartość zwracana

Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.

Uwagi

IWorkerThreadClient::Execute zostanie wywołany za pośrednictwem elementu pClient , gdy czasomierz zostanie zasygnalizowany.

Przekaż uchwyt czasomierza z phTimer do CWorkerThread::RemoveHandle , aby zamknąć czasomierz.

CWorkerThread::CWorkerThread

Konstruktor.

CWorkerThread() throw();

CWorkerThread::~CWorkerThread

Destruktora.

~CWorkerThread() throw();

Uwagi

Wywołuje metodę CWorkerThread::Shutdown.

CWorkerThread::GetThreadHandle

Wywołaj tę metodę, aby uzyskać dojście wątku roboczego.

HANDLE GetThreadHandle() throw();

Wartość zwracana

Zwraca uchwyt wątku lub wartość NULL, jeśli wątek roboczy nie został zainicjowany.

CWorkerThread::GetThreadId

Wywołaj tę metodę, aby uzyskać identyfikator wątku procesu roboczego.

DWORD GetThreadId() throw();

Wartość zwracana

Zwraca identyfikator wątku lub wartość NULL, jeśli wątek procesu roboczego nie został zainicjowany.

CWorkerThread::Initialize

Wywołaj tę metodę, aby zainicjować wątek procesu roboczego.

HRESULT Initialize() throw();

HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();

Parametry

PThread
Istniejący wątek procesu roboczego.

Wartość zwracana

Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.

Uwagi

Ta metoda powinna być wywoływana w celu zainicjowania obiektu po utworzeniu lub po wywołaniu metody CWorkerThread::Shutdown.

Aby mieć co najmniej dwa CWorkerThread obiekty, użyj tego samego wątku roboczego, zainicjuj jeden z nich bez przekazywania argumentów, a następnie przekaż wskaźnik do Initialize tego obiektu metodom innych. Obiekty zainicjowane przy użyciu wskaźnika powinny zostać zamknięte przed zainicjowanym obiektem.

Zobacz CWorkerThread::Shutdown , aby uzyskać informacje na temat zmiany zachowania tej metody podczas inicjowania przy użyciu wskaźnika do istniejącego obiektu.

CWorkerThread::RemoveHandle

Wywołaj tę metodę, aby usunąć uchwyt z listy obiektów oczekujących.

HRESULT RemoveHandle(HANDLE hObject) throw();

Parametry

hObject
Uchwyt do usunięcia.

Wartość zwracana

Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.

Uwagi

Po usunięciu dojścia element IWorkerThreadClient::CloseHandle zostanie wywołany dla skojarzonego obiektu przekazanego do elementu AddHandle. Jeśli to wywołanie zakończy się niepowodzeniem, CWorkerThread wywoła funkcję CloseHandle systemu Windows na dojściu.

CWorkerThread::Shutdown

Wywołaj tę metodę, aby zamknąć wątek procesu roboczego.

HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();

Parametry

dwWait
Czas w milisekundach oczekiwania na zamknięcie wątku roboczego. ATL_WORKER_THREAD_WAIT wartość domyślna to 10 sekund. W razie potrzeby możesz zdefiniować własną wartość dla tego symbolu przed dołączeniem pliku atlutil.h.

Wartość zwracana

Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia, taki jak przekroczenie wartości limitu czasu dwWait.

Uwagi

Aby ponownie użyć obiektu, wywołaj metodę CWorkerThread::Initialize po wywołaniu tej metody.

Należy pamiętać, że wywołanie Shutdown obiektu zainicjowanego za pomocą wskaźnika do innego CWorkerThread obiektu nie ma żadnego wpływu i zawsze zwraca S_OK.

Zobacz też

DefaultThreadTraits
Klasy
Wielowątkowość: tworzenie wątków roboczych
Interfejs IWorkerThreadClient