Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
Этот класс создает рабочий поток или использует существующий, ожидает обработки одного или нескольких объектов ядра и выполняет указанную клиентную функцию при сигнале одного из дескрипторов.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения 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