CWinThread クラス
更新 : 2007 年 11 月
アプリケーション内の実行中のスレッドを表します。
class CWinThread : public CCmdTarget
解説
実行のメイン スレッドは、通常 CWinApp クラスから派生したオブジェクトにより提供されます。CWinApp クラスは、CWinThread クラスから派生しています。CWinThread オブジェクトを追加することにより、アプリケーション内でのマルチ スレッドが可能になります。
CWinThread がサポートするスレッドには、ワーカー スレッドとユーザー インターフェイス スレッドという 2 種類の一般的なスレッドがあります。ワーカー スレッドはメッセージ ポンプを持っていません。スプレッドシート アプリケーションのバックグラウンドで計算を行うスレッドがその例です。ユーザー インターフェイス スレッドはメッセージ ポンプを持っていて、システムから受け取ったメッセージを処理します。ユーザー インターフェイス スレッドの例には、CWinApp クラスとその派生クラスがあります。ほかのユーザー インターフェイス スレッドも、CWinThread クラスから直接派生できます。
CWinThread クラスのオブジェクトは、一般的にはスレッドが存続している間だけ存在します。この動作を変更するときは、m_bAutoDelete に FALSE を設定します。
CWinThread クラスは、MFC を完全にスレッドセーフにするために必要になります。スレッド固有の情報を管理するためにフレームワークが使うスレッド ローカル データは、CWinThread オブジェクトが管理します。スレッド ローカル データの処理が CWinThread に依存しているため、MFC を使うスレッドは MFC によって作成されている必要があります。たとえば、ランタイム関数 _beginthread、beginthreadex で作成されたスレッドは、どの MFC API も使うことができません。
スレッドを作成するには、AfxBeginThread 関数を呼び出します。ワーカー スレッド、またはユーザー インターフェイス スレッドのどちらを必要とするかによって、この関数には 2 つの形式があります。ユーザー インターフェイス スレッドが必要なときは、CWinThread の派生クラスの CRuntimeClass へのポインタを AfxBeginThread 関数に渡します。ワーカー スレッドを作成するときは、制御関数へのポインタと制御関数へのパラメータを AfxBeginThread 関数に渡します。ワーカー スレッドとユーザー インターフェイス スレッドには、どちらにも優先度、スタック サイズ、作成フラグ、セキュリティ属性を変更する省略可能なパラメータを指定できます。AfxBeginThread 関数が新しい CWinThread オブジェクトへのポインタを返します。
AfxBeginThread 関数を呼び出す代わりに、CWinThread 派生オブジェクトを構築してから CreateThread を呼び出すという方法もあります。この 2 段階の構築方法は、スレッド実行の作成と終了を繰り返す間、CWinThread オブジェクトを再利用する場合に便利です。
CWinThread クラスの詳細については、「C++ と MFC を使用するマルチスレッド」、「マルチスレッド : ユーザー インターフェイス スレッドの生成」、「マルチスレッド : ワーカー スレッドの生成」、および「マルチスレッド : 同期クラスの使用法」を参照してください。
必要条件
ヘッダー : afxwin.h