Last Updated 2005/01/13 |
Programming Tips Visual C++ MFC スレッド | 索 引 |
スレッドでのCWnd
2005/01/13
MFC にて AfxBeginThread() を使用して,マルチスレッドにする. しかし,CView 派生クラスへのポインタを渡してそのメンバ関数を呼ぶとアサートされる. スレッド間で CWnd などを扱うには CWnd のポインタではなく HWND で処理を行う. MFC の CWnd は上記の様にスレッドセーフなつくりになっておらず,タイミングによっては問題が生じる場合がある. (多くの場合ポインタ渡しで使用しても問題はない) MFC はスレッド毎にハンドルと MFC クラスの対応表を保持して,マルチスレッドの場合,この対応表が複数存在することになる. メインスレッドにて CView 派生クラスの対応がは存在しても,サブスレッドで対応が存在しなければアサートされる. このことは MSDN にも書いてある.(マルチスレッド : プログラミングのヒント) HWND を渡して,FromHandle() などを使用して MFC オブジェクトに変換すればよい. 参照 |
|