MFCでスレッド関数に非静的メンバー変数を渡す

702 ワード



MFCの下でクラスのスレッド関数は静的関数でなければならない.すなわち、あるオブジェクトに属さず、クラスメソッドに属し、オブジェクトが終了するとスレッドは終了しない.
一方、静的関数は静的メンバー変数を使用する必要があります.したがって、通常のメンバー変数は使用できません.
以上の問題を解決する方法は、スレッドメソッドにthisポインタをパラメータとして渡し、thisポインタを介してメンバー変数または通常のメンバーメソッドにアクセスすることです.
スレッドの作成と開始:
AfxBeginThread((AFX_THREADPROC)ThreadFunction, this);
この関数はCWinThreadオブジェクトポインタを返します.最初のパラメータはスレッド関数ポインタで、2番目のパラメータはスレッド関数に渡されるパラメータです.その他のパラメータはMSDNを参照してください.
スレッド関数(固定フォーマットがあり、クラスのスレッドメソッドは静的メソッド):
UINT CXX::ThreadFunction(LPVOID pParam)
{
    CXX* pThreadParam = (CXX *)pParam;
    pThreadParam->m_variable;	//  CXX         m_variable
	
		/*    */
		
		return 0;
}