AfxBeginThread
更新 : 2007 年 11 月
新しいスレッドを作成します。
CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
パラメータ
pfnThreadProc
ワーカー スレッドの制御関数を指します。NULL は指定できません。この関数は次のように宣言される必要があります。UINT __cdecl MyControllingFunction( LPVOID pParam );
pThreadClass
CWinThread から派生されたオブジェクトの RUNTIME_CLASS。pParam
pfnThreadProc の関数宣言のパラメータに見られるような、制御関数に渡すパラメータ。nPriority
スレッドの優先度。0 の場合、スレッドを作成したプロセスと同じ優先度が使われます。利用できる優先度の一覧と説明については、Windows SDK の「SetThreadPriority」を参照してください。nStackSize
新しいスレッドのスタック サイズをバイト数で指定します。0 のときは、スレッドを作成したプロセスのスタック サイズと同じサイズが既定になります。dwCreateFlags
スレッドの作成を制御する追加フラグを指定します。このフラグには次の 2 つの値のいずれかを指定できます。CREATE_SUSPENDED サスペンド カウントを 1 としてスレッドを開始します。スレッドの実行を開始する前に、m_bAutoDelete または派生クラスのメンバなどの CWinThread オブジェクトのメンバ データを初期化する場合は、CREATE_SUSPENDED を使用します。初期化完了後、スレッドを実行するには、CWinThread::ResumeThread を使用します。スレッドは、CWinThread::ResumeThread が呼び出されるまで実行されません。
0 作成直後にスレッドを開始します。
lpSecurityAttrs
スレッドのセキュリティ属性を指定する SECURITY_ATTRIBUTES 構造体を指します。NULL のときは、スレッドを作成したプロセスと同じセキュリティ属性を使います。この構造体の詳細については、Windows SDK を参照してください。
戻り値
新たに作成されたスレッド オブジェクトへのポインタ。エラーが発生した場合は NULL となります。
解説
最初の形式の AfxBeginThread はワーカー スレッドを作成します。2 番目の形式の AfxBeginThread はユーザー インターフェイス スレッドを作成します。
AfxBeginThread は新しい CWinThread オブジェクトを作成し、スレッドを開始するために CreateThread 関数を呼び出します。さらに、スレッドへのポインタを返します。なんらかの原因でスレッド生成に失敗すると、スレッド生成処理全体をチェックし、すべてのオブジェクトを確実に解放します。スレッドを終了するにはスレッドの内部から AfxEndThread を呼び出すかワーカー スレッドの制御関数から復帰します。
アプリケーション側でマルチスレッド処理が有効にされている必要があります。そうでない場合、この関数は失敗します。マルチスレッド処理の有効化の詳細については、「Visual C++ コンパイラ オプション」の「/MD、/MT、/LD (ランタイム ライブラリの使用)」を参照してください。
AfxBeginThread の詳細については、「マルチスレッド : ワーカー スレッドの生成」と「マルチスレッド : ユーザー インターフェイス スレッドの生成」を参照してください。
使用例
「CSocket::Attach」の例を参照してください。
必要条件
ヘッダー : afxwin.h