CWinThread クラス

アプリケーション内の実行中のスレッドを表します。

class CWinThread : public CCmdTarget

解説

実行のメイン スレッドは、通常 CWinApp クラスから派生したオブジェクトにより提供されます。CWinApp クラスは、CWinThread クラスから派生しています。 CWinThread オブジェクトを追加することにより、アプリケーション内でのマルチ スレッドが可能になります。

2 つの一般的な種類のスレッドは、CWinThreadをサポートしています。ワーカー スレッドとユーザー インターフェイス スレッド。 ワーカー スレッドは、メッセージ ポンプがあります。たとえば、スプレッドシート アプリケーションで背景の計算を実行スレッド。 ユーザー インターフェイス スレッドはメッセージ ポンプを持っていて、システムから受け取ったメッセージを処理します。 ユーザー インターフェイス スレッドの例には、CWinApp クラスとその派生クラスがあります。 ほかのユーザー インターフェイス スレッドも、CWinThread クラスから直接派生できます。

CWinThread クラスのオブジェクトは、一般的にはスレッドが存続している間だけ存在します。 この動作を変更するときは、m_bAutoDeleteFALSE を設定します。

CWinThread クラスは、MFC を完全にスレッドセーフにするために必要になります。 スレッド固有の情報を管理するためにフレームワークが使うスレッド ローカル データは、CWinThread オブジェクトが管理します。 スレッド ローカル データの処理が CWinThread に依存しているため、MFC を使うスレッドは MFC によって作成されている必要があります。 たとえば、ランタイム関数 _beginthread、beginthreadex で作成されたスレッドは、どの MFC API も使うことができません。

スレッドを作成するには、AfxBeginThread 関数を呼び出します。 ワーカー スレッド、またはユーザー インターフェイス スレッドのどちらを必要とするかによって、この関数には 2 つの形式があります。 ユーザー インターフェイス スレッドが必要なときは、CWinThread の派生クラスの CRuntimeClass へのポインターを AfxBeginThread 関数に渡します。 ワーカー スレッドを作成するときは、制御関数へのポインターと制御関数へのパラメーターを AfxBeginThread 関数に渡します。 ワーカー スレッドとユーザー インターフェイス スレッドには、どちらにも優先度、スタック サイズ、作成フラグ、セキュリティ属性を変更する省略可能なパラメーターを指定できます。 AfxBeginThread 関数が新しい CWinThread オブジェクトへのポインターを返します。

AfxBeginThread 関数を呼び出す代わりに、CWinThread 派生オブジェクトを構築してから CreateThread を呼び出すという方法もあります。 この 2 段階の構築方法は、スレッド実行の作成と終了を繰り返す間、CWinThread オブジェクトを再利用する場合に便利です。

詳細についてCWinThread、記事を参照してくださいマルチ スレッド「マルチ スレッド:ユーザー インターフェイス スレッドを作成するマルチ スレッド:ワーカー スレッドを作成する、および マルチ スレッド:同期クラスの使用方法

必要条件

**ヘッダー:**afxwin.h

参照

参照

CCmdTarget クラス

階層図

CWinApp クラス

CCmdTarget クラス

その他の技術情報

CWinThread のメンバー