Udostępnij za pośrednictwem


Klasa CWorkerThread

Uwaga / Notatka

Aktywna biblioteka szablonów (ATL) nadal jest obsługiwana. Nie dodajemy już funkcji ani nie aktualizujemy dokumentacji.

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.

Elementy członkowskie

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