다음을 통해 공유


CWorkerThread 클래스

이 클래스는 작업자 스레드를 만들거나 기존 스레드를 사용하며 하나 이상의 커널 개체 핸들을 대기하고 핸들 중 하나가 신호를 받으면 지정된 클라이언트 함수를 실행합니다.

Important

이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.

구문

template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread

매개 변수

ThreadTraits
CRTThreadTraits 또는 Win32ThreadTraits와 같은 스레드 만들기 함수를 제공하는 클래스입니다.

멤버

보호된 구조체

속성 설명
WorkerClientEntry

공용 생성자

속성 설명
CWorkerThread::CWorkerThread 작업자 스레드에 대한 생성자입니다.
CWorkerThread::~CWorkerThread 작업자 스레드에 대한 소멸자입니다.

공용 메서드

이름 설명
CWorkerThread::AddHandle 이 메서드를 호출하여 작업자 스레드에서 유지 관리하는 목록에 대기 가능한 개체의 핸들을 추가합니다.
CWorkerThread::AddTimer 이 메서드를 호출하여 작업자 스레드에서 유지 관리하는 목록에 주기적 대기 가능 타이머를 추가합니다.
CWorkerThread::GetThreadHandle 이 메서드를 호출하여 작업자 스레드의 스레드 핸들을 가져옵니다.
CWorkerThread::GetThreadId 이 메서드를 호출하여 작업자 스레드의 스레드 ID를 가져옵니다.
CWorkerThread::Initialize 이 메서드를 호출하여 작업자 스레드를 초기화합니다.
CWorkerThread::RemoveHandle 대기 가능한 개체 목록에서 핸들을 제거하려면 이 메서드를 호출합니다.
CWorkerThread::Shutdown 이 메서드를 호출하여 작업자 스레드를 종료합니다.

설명

CWorkerThread를 사용하려면

  1. 이 클래스의 인스턴스를 만듭니다.

  2. CWorkerThread::Initialize를 호출 합니다.

  3. 커널 개체의 핸들과 IWorkerThreadClient 구현에 대한 포인터를 사용하여 CWorkerThread::AddHandle을 호출합니다.

    - 또는 -

    IWorkerThreadClient 구현에 대한 포인터를 사용하여 CWorkerThread::AddTimer를 호출합니다.

  4. IWorkerThreadClient::Execute를 구현하여 핸들 또는 타이머에 신호를 보낼 때 몇 가지 작업을 수행합니다.

  5. 대기 가능한 개체 목록에서 개체를 제거하려면 CWorkerThread::RemoveHandle을 호출합니다.

  6. 스레드를 종료하려면 CWorkerThread::Shutdown을 호출 합니다.

요구 사항

헤더: atlutil.h

CWorkerThread::AddHandle

이 메서드를 호출하여 작업자 스레드에서 유지 관리하는 목록에 대기 가능한 개체의 핸들을 추가합니다.

HRESULT AddHandle(
    HANDLE hObject,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam) throw();

매개 변수

hObject
대기 가능한 개체에 대한 핸들입니다.

pClient
핸들이 신호를 받을 때 호출할 개체의 IWorkerThreadClient 인터페이스에 대한 포인터입니다.

dwParam
핸들이 신호를 받을 때 IWorkerThreadClient::Execute 에 전달할 매개 변수입니다.

Return Value

성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.

설명

IWorkerThreadClient::Execute는 핸들 hObject가 신호를 받으면 pClient를 통해 호출됩니다.

CWorkerThread::AddTimer

이 메서드를 호출하여 작업자 스레드에서 유지 관리하는 목록에 주기적 대기 가능 타이머를 추가합니다.

HRESULT AddTimer(
    DWORD dwInterval,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam,
    HANDLE* phTimer) throw();

매개 변수

dwInterval
타이머의 기간을 밀리초 단위로 지정합니다.

pClient
핸들이 신호를 받을 때 호출할 개체의 IWorkerThreadClient 인터페이스에 대한 포인터입니다.

dwParam
핸들이 신호를 받을 때 IWorkerThreadClient::Execute 에 전달할 매개 변수입니다.

phTimer
[out] 성공 시 새로 만든 타이머에 대한 핸들을 수신하는 HANDLE 변수의 주소입니다.

Return Value

성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.

설명

IWorkerThreadClient::Execute는 타이머에 신호를 보낼 때 pClient를 통해 호출됩니다.

타이머 핸들을 phTimer에서 CWorkerThread::RemoveHandle로 전달하여 타이머를 닫습니다.

CWorkerThread::CWorkerThread

생성자입니다.

CWorkerThread() throw();

CWorkerThread::~CWorkerThread

소멸자입니다.

~CWorkerThread() throw();

설명

CWorkerThread::Shutdown을 호출 합니다.

CWorkerThread::GetThreadHandle

이 메서드를 호출하여 작업자 스레드의 스레드 핸들을 가져옵니다.

HANDLE GetThreadHandle() throw();

Return Value

작업자 스레드가 초기화되지 않은 경우 스레드 핸들 또는 NULL을 반환합니다.

CWorkerThread::GetThreadId

이 메서드를 호출하여 작업자 스레드의 스레드 ID를 가져옵니다.

DWORD GetThreadId() throw();

Return Value

작업자 스레드가 초기화되지 않은 경우 스레드 ID 또는 NULL을 반환합니다.

CWorkerThread::Initialize

이 메서드를 호출하여 작업자 스레드를 초기화합니다.

HRESULT Initialize() throw();

HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();

매개 변수

pThread
기존 작업자 스레드입니다.

Return Value

성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.

설명

생성 후 또는 CWorkerThread::Shutdown 호출 후에 개체를 초기화하려면 이 메서드를 호출해야 합니다.

둘 이상의 CWorkerThread 개체가 동일한 작업자 스레드를 사용하도록 하려면 인수를 전달하지 않고 해당 개체 중 하나를 초기화한 다음 해당 개체에 대한 포인터를 다른 개체의 메서드에 Initialize 전달합니다. 포인터를 사용하여 초기화된 개체는 초기화하는 데 사용되는 개체 전에 종료해야 합니다.

기존 개체에 대한 포인터를 사용하여 초기화할 때 해당 메서드의 동작이 어떻게 변경되는지에 대한 자세한 내용은 CWorkerThread::Shutdown을 참조하세요.

CWorkerThread::RemoveHandle

대기 가능한 개체 목록에서 핸들을 제거하려면 이 메서드를 호출합니다.

HRESULT RemoveHandle(HANDLE hObject) throw();

매개 변수

hObject
제거할 핸들입니다.

Return Value

성공 시 S_OK를 반환하거나 실패 시 HRESULT 오류를 반환합니다.

설명

핸들이 제거되면 AddHandle에 전달된 연결된 개체에서 IWorkerThreadClient::CloseHandle이 호출됩니다. 이 호출이 실패 CWorkerThread 하면 핸들에서 Windows CloseHandle 함수를 호출합니다.

CWorkerThread::Shutdown

이 메서드를 호출하여 작업자 스레드를 종료합니다.

HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();

매개 변수

dwWait
작업자 스레드가 종료될 때까지 대기하는 시간(밀리초)입니다. ATL_WORKER_THREAD_WAIT 기본값은 10초입니다. 필요한 경우 atlutil.h를 포함하기 전에 이 기호에 대한 고유한 값을 정의할 수 있습니다.

Return Value

성공 시 S_OK 반환하거나 시간 제한 값 인 dwWait을 초과하는 경우와 같이 실패 시 오류 HRESULT를 반환합니다.

설명

개체를 다시 사용하려면 이 메서드를 호출한 후 CWorkerThread::Initialize를 호출합니다.

다른 CWorkerThread 개체에 대한 포인터를 사용하여 초기화된 개체에 대한 호출 Shutdown 은 효과가 없으며 항상 S_OK 반환합니다.

참고 항목

DefaultThreadTraits
클래스
다중 스레딩: 작업자 스레드 만들기
IWorkerThreadClient 인터페이스