struct SThraedParam
{
CKana* pcThis;
HANDLE hEvent;
};
int CKana::Func()
{
UINT nThreadID;
ATL::CEvent cEvent(false, true, NULL, NULL);
SThreadParam sParam = { this, cEvent };
m_hThreadHandle = reinterpret_cast<HANDLE>(
_beginthreadex(NULL, 0, &CKana::thread_func_static, &sParam, 0, &nThreadID)));
if(!WaitThread(cEvent))
{
::TerminateThread(m_cThreadHandle, POP3_Abort);
return -1;
}
return 0;
}
unsigned CALLBACK CKana::thread_func_static(void *ptr)
{
SThreadParam* p = static_cast<SThreadParam*>(ptr);
::SetEvent(p->hEvent);
const int nResult = p->pcThis->thread_func();
_endthreadex(nResult);
return eResult;
}
イベントをシグナルにしてしまった以上、p が生きてる保証なんて何処にも無いですからねー。 呼び出し元の関数が終了しちゃってるかもしれないしぃ〜 orz
つか、このミス昔にもやってたはず……成長無ぇーー!!(涙