1. 主对话框有一个按钮,click后创建CMyThread 线程.ON_MESSAGE(TM_RCV, OnRcvvoid CTestDlgDlg::OnButton1() 
{
CMyThread *pThread = (CMyThread *)::AfxBeginThread(
RUNTIME_CLASS(CMyThread),
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);

pThread->SetDlg(this);

pThread->ResumeThread();}void CTestDlgDlg::OnRcv()
{
AfxMessageBox("收到消息");
}2. CMyThread 线程只是简单的向CTestDlgDlg发一个消息后便退出.
BOOL CMyThread ::InitInstance()
{
// TODO:  perform and per-thread initialization here ::PostMessage(m_pDlg->m_hWnd, TM_RCV, 0, 0); ::AfxEndThread(0);
return TRUE;
}现象:在debug下一切正常.但是在release下按几次button1后便会出错,请高手指点一下.

解决方案 »

  1.   

    DEBUG和Release下的差别,多半是由于变量初始化引起的。
      

  2.   

    DEBUG和Release变量初始化有什么不同吗?
    上面的确就是那么点代码,也没有变量初始化问题呀.
      

  3.   

    pThread->SetDlg(this);
    ?1.最好是传递HWND, 而不是CWnd*, 因为MFC的CWnd不是线程安全的。
    2.有没有变量未初始化的问题(尤其是指针)
      

  4.   

    把OnRcv函数设置为带两个参数的函数(因为在release中需要匹对参数,而debug中匹对参数方式和release方式不一样)
      

  5.   

    同意piqingping(皮皮)。
    release版在消息函数退出时,要对参数做处理,即退栈。
      

  6.   

    在Release下,禁用优化,选择生成调试信息...配好Release下的调试环境,看看问题在哪儿。
      

  7.   

    果然在Rcv加了参数就行了!歇歇各位了!