CWorkerThread クラス
このクラスにより、ワーカー スレッドを作成するか、既存のものを使い、1 つ以上のカーネル オブジェクト ハンドルで待機し、いずれかのハンドルがシグナルされたときに指定したクライアント関数を実行します。
重要
このクラスとそのメンバーは、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 を使用するには
このクラスのインスタンスを作成します。
CWorkerThread::Initialize を呼び出します。
カーネル オブジェクトのハンドルと IWorkerThreadClient の実装へのポインターを使用して、CWorkerThread::AddHandle を呼び出します。
または
IWorkerThreadClient の実装へのポインターを使用して、CWorkerThread::AddTimer を呼び出します。
ハンドルまたはタイマーがシグナルされたときに何らかのアクションを実行するには、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 を返します。
解説
ハンドル hObject がシグナルされると、IWorkerThreadClient::Execute は pClient を介して呼び出されます。
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::Execute は pClient を介して呼び出されます。
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 インターフェイス