次の方法で共有


CWorkerThread クラス

このクラスにより、ワーカー スレッドを作成するか、既存のものを使い、1 つ以上のカーネル オブジェクト ハンドルで待機し、いずれかのハンドルがシグナルされたときに指定したクライアント関数を実行します。

重要

このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。

構文

template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread

パラメーター

ThreadTraits
CRTThreadTraitsWin32ThreadTraits などのスレッド作成関数を提供するクラス。

メンバー

保護された構造体

名前 説明
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 に渡されるパラメーター。

戻り値

成功した場合は S_OK、失敗した場合はエラー HRESULT を返します。

解説

ハンドル hObject がシグナルされると、IWorkerThreadClient::ExecutepClient を介して呼び出されます。

CWorkerThread::AddTimer

ワーカー スレッドによって保持されるリストに定期的に待機可能なタイマーを追加するには、このメソッドを呼び出します。

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

パラメーター

dwInterval
タイマーの期間をミリ秒単位で指定します。

pClient
ハンドルがシグナルされたときに呼び出されるオブジェクトでの IWorkerThreadClient インターフェイスへのポインター。

dwParam
ハンドルがシグナルされたときに IWorkerThreadClient::Execute に渡されるパラメーター。

phTimer
[出力] 成功すると、新しく作成されたタイマーへのハンドルを受け取る HANDLE 変数のアドレス。

戻り値

成功した場合は S_OK、失敗した場合はエラー HRESULT を返します。

解説

タイマーがシグナルされると、IWorkerThreadClient::ExecutepClient を介して呼び出されます。

phTimer から CWorkerThread::RemoveHandle にタイマー ハンドルを渡して、タイマーを閉じます。

CWorkerThread::CWorkerThread

コンストラクター。

CWorkerThread() throw();

CWorkerThread::~CWorkerThread

デストラクター。

~CWorkerThread() throw();

解説

CWorkerThread::Shutdown を呼び出します。

CWorkerThread::GetThreadHandle

ワーカー スレッドのスレッド ハンドルを取得するには、このメソッドを呼び出します。

HANDLE GetThreadHandle() throw();

戻り値

スレッド ハンドルを返します。ワーカー スレッドが初期化されていない場合は NULL を返します。

CWorkerThread::GetThreadId

ワーカー スレッドのスレッド ID を取得するには、このメソッドを呼び出します。

DWORD GetThreadId() throw();

戻り値

スレッド ID を返します。ワーカー スレッドが初期化されていない場合は 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 を返します。

解説

ハンドルが削除されると、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 を含める前に、このシンボルに対して独自の値を定義することができます。

戻り値

成功した場合は S_OK を、タイムアウト値 dwWait の超過のような失敗の場合は、エラー HRESULT を返します。

解説

オブジェクトを再利用するには、このメソッドを呼び出した後で CWorkerThread::Initialize を呼び出します。

別の CWorkerThread オブジェクトへのポインターで初期化されたオブジェクトで Shutdown を呼び出しても効果はなく、常に S_OK を返します。

関連項目

DefaultThreadTraits
クラス
マルチスレッド: ワーカー スレッドの生成
IWorkerThreadClient インターフェイス