Last Updated 2005/01/11 |
Programming Tips Visual C++ MFC スレッド | 索 引 |
スレッドの終了
2005/01/11
ユーザーインターフェイススレッドを終了させるには PostThreadMessage() にて WM_QUIT を送信するとよい.(ウィンドウがなくてもメッセージ処理可能である) スレッドへのメッセージ送信でも WM_USER からのオフセットを使用しなければならない.(この辺はウィンドウに対するメッセージ送信と同様である) 試しにメッセージ ID を 1 にして送信しても処理されない. (メッセージ ID 1 は WM_CREATE と同じ値である) (ちなみに 0 は WM_NULL) スレッドを WM_QUIT などで終了させた場合,その終了を待つ必要がある. スレッドが終了する前にメインスレッドが終了してメモリリークする場合があるからである. 終了待ちには WaitForSingleObject() などを使用する. ちなみにスレッドハンドルにて終了コードを取得する場合,GetExitCodeThread() を使用するが,スレッドハンドルをそのまま渡すと例外が発生する. DuplicateHandle() でスレッドハンドルをコピーしてから GetExitCodeThread() しなければならない. スレッドを終了するコードは以下の通りである.
スレッドの m_bAutoDelete を FALSE にしておけば,スレッドハンドルを複製する必要はない.その代わり自分で delete する. 参照 |
|