Класс CWorkerThread
Этот класс создает рабочий поток или использует существующий, ожидает обработки одного или нескольких объектов ядра и выполняет указанную клиентную функцию при сигнале одного из дескрипторов.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Параметры
ThreadTraits
Класс, предоставляющий функцию создания потока, например CRTThreadTraits или Win32ThreadTraits.
Участники
Защищенные структуры
Имя | Описание |
---|---|
WorkerClientEntry |
Открытые конструкторы
Имя | Описание |
---|---|
CWorkerThread::CWorkerThread | Конструктор для рабочего потока. |
CWorkerThread::~CWorkerThread | Деструктор для рабочего потока. |
Открытые методы
Имя | Описание |
---|---|
CWorkerThread::AddHandle | Вызовите этот метод, чтобы добавить дескриптор объекта ожидания в список, поддерживаемый рабочим потоком. |
CWorkerThread::AddTimer | Вызовите этот метод, чтобы добавить периодический таймер ожидания в список, поддерживаемый рабочим потоком. |
CWorkerThread::GetThreadHandle | Вызовите этот метод, чтобы получить дескриптор потока рабочей роли. |
CWorkerThread::GetThreadId | Вызовите этот метод, чтобы получить идентификатор потока рабочего потока. |
CWorkerThread::Initialize | Вызовите этот метод для инициализации рабочего потока. |
CWorkerThread::RemoveHandle | Вызовите этот метод, чтобы удалить дескриптор из списка ожидающих объектов. |
CWorkerThread::Shutdown | Вызовите этот метод, чтобы завершить работу рабочего потока. |
Замечания
Использование CWorkerThread
Создайте экземпляр этого класса.
Вызовите CWorkerThread::Initialize.
Вызовите CWorkerThread::AddHandle с дескриптором объекта ядра и указателем на реализацию IWorkerThreadClient.
- или -
Вызовите CWorkerThread::AddTimer указателем на реализацию IWorkerThreadClient.
Реализуйте IWorkerThreadClient::Execute , чтобы выполнить некоторые действия при сигнале дескриптора или таймера.
Чтобы удалить объект из списка ожидающих объектов, вызовите CWorkerThread::RemoveHandle.
Чтобы завершить поток, вызовите CWorkerThread::Shutdown.
Требования
Заголовок: atlutil.h
CWorkerThread::AddHandle
Вызовите этот метод, чтобы добавить дескриптор объекта ожидания в список, поддерживаемый рабочим потоком.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Параметры
hObject
Дескриптор для ожидаемого объекта.
pClient
Указатель на интерфейс IWorkerThreadClient объекта, вызываемый при сигнале дескриптора.
dwParam
Параметр, передаваемый в IWorkerThreadClient::Execute при сигнале дескриптора .
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
IWorkerThreadClient::Execute будет вызываться через pClient при сигнале дескриптора, hObject.
CWorkerThread::AddTimer
Вызовите этот метод, чтобы добавить периодический таймер ожидания в список, поддерживаемый рабочим потоком.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
Параметры
dwInterval
Указывает период таймера в миллисекундах.
pClient
Указатель на интерфейс IWorkerThreadClient объекта, вызываемый при сигнале дескриптора.
dwParam
Параметр, передаваемый в IWorkerThreadClient::Execute при сигнале дескриптора .
phTimer
[out] Адрес переменной HANDLE, которая при успешном выполнении получает дескриптор только что созданному таймеру.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
IWorkerThreadClient::Execute будет вызываться через pClient , когда таймер сигнализирует.
Передайте дескриптор таймера из phTimer в CWorkerThread::RemoveHandle, чтобы закрыть таймер.
CWorkerThread::CWorkerThread
Конструктор.
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
Деструктор
~CWorkerThread() throw();
Замечания
Вызывает CWorkerThread::Shutdown.
CWorkerThread::GetThreadHandle
Вызовите этот метод, чтобы получить дескриптор потока рабочей роли.
HANDLE GetThreadHandle() throw();
Возвращаемое значение
Возвращает дескриптор потока или NULL, если рабочий поток не инициализирован.
CWorkerThread::GetThreadId
Вызовите этот метод, чтобы получить идентификатор потока рабочего потока.
DWORD GetThreadId() throw();
Возвращаемое значение
Возвращает идентификатор потока или ЗНАЧЕНИЕ NULL, если рабочий поток не инициализирован.
CWorkerThread::Initialize
Вызовите этот метод для инициализации рабочего потока.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Параметры
pThread
Существующий рабочий поток.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
Этот метод должен вызываться для инициализации объекта после создания или после вызова CWorkerThread::Shutdown.
Чтобы использовать один или несколько CWorkerThread
объектов, инициализировать один из них, не передавая аргументы, передайте указатель на этот объект Initialize
в методы других. Объекты, инициализированные с помощью указателя, должны быть закрыты перед тем, как объект использовался для их инициализации.
Сведения о том, как поведение этого метода изменяется при инициализации с помощью указателя на существующий объект, см. в разделе CWorkerThread::Shutdown .
CWorkerThread::RemoveHandle
Вызовите этот метод, чтобы удалить дескриптор из списка ожидающих объектов.
HRESULT RemoveHandle(HANDLE hObject) throw();
Параметры
hObject
Дескриптор для удаления.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибку HRESULT при сбое.
Замечания
При удалении дескриптора IWorkerThreadClient::CloseHandle будет вызываться для связанного объекта, переданного в AddHandle. Если этот вызов завершается ошибкой, CWorkerThread
вызовет функцию Windows CloseHandle в дескрипторе.
CWorkerThread::Shutdown
Вызовите этот метод, чтобы завершить работу рабочего потока.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Параметры
dwWait
Время в миллисекундах, чтобы дождаться завершения работы рабочего потока. ATL_WORKER_THREAD_WAIT по умолчанию — 10 секунд. При необходимости можно определить собственное значение для этого символа, прежде чем включать atlutil.h.
Возвращаемое значение
Возвращает S_OK об успешном выполнении или ошибке HRESULT при сбое, например, если превышено значение времени ожидания, dwWait.
Замечания
Чтобы повторно использовать объект, вызовите CWorkerThread::Initialize после вызова этого метода.
Обратите внимание, что вызов Shutdown
объекта, инициализированного указателем на другой CWorkerThread
объект, не влияет и всегда возвращает S_OK.
См. также
DefaultThreadTraits
Классы
Многопоточность. Создание рабочих потоков
Интерфейс IWorkerThreadClient