//スレッド初期化
void CxxxDoc::FormatThread()
{
//グラブスレッド関係初期化
m_bContinueGrab = false;
m_hThreadDoneEvent = ::CreateEvent( NULL, TRUE, FALSE, NULL );//スレッドの生成
}

//グラブスレッド関数
DWORD WINAPI CxxxDoc::grabImageThread( LPVOID lpParameter )
{
CxxxDoc* pDoc = (CxxxDoc*)lpParameter;

//開始するかのチェック
pDoc->Ga_Flg_Main = pDoc->GaEndJudge(); //最大成長回数に到達してないか、収束したかどうか
//メインループ
while(pDoc->Ga_Flg_Main == true){ //これが0になるとおしまい(終了したいとき0にすればよい)
if( (pDoc->Ga_Flg_Main=pDoc->GaEndJudge())==true){ //最大成長回数に到達してないか、収束したかどうか
//以降GA処理
pDoc->Ga_Ga_Gen ++; //経過世代のカウント
if(pDoc->Ga_Ga_Gen != 1) //最初じゃなければ
pDoc->Sga.GenStep(); //1ステップ実行
pDoc->GaUseOfPara(); //パラメータを使って処理
//以上GA処理
if(pDoc->Ga_Flg_AllOrOne==false) //ワンステップ実行判定
pDoc->Ga_Flg_Main = 0; //実行したから終わり
}
}
::SetEvent( pDoc->m_hThreadDoneEvent );
return 0;
}


おまけ
//スレッド内にいるため、いつでも以下の3行でReDrawできる
POSITION pos = GetFirstViewPosition();
CxxxView* pV = (CxxxView*)GetNextView( pos );
pV->ReDraw(); //グラブした画像の描画