Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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