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.
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
Utwórz wystąpienie tej klasy.
Wywołaj metodę CWorkerThread::Initialize.
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.
Zaimplementuj element IWorkerThreadClient::Wykonaj , aby wykonać jakąś akcję w przypadku zasygnaliowania uchwytu lub czasomierza.
Aby usunąć obiekt z listy obiektów oczekujących, wywołaj metodę CWorkerThread::RemoveHandle.
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