BOOL CTestCommDlg::OnInitDialog()
{
。。
     m_hThread = CreateThread(NULL, 0, MyThreadProc, this, 0, NULL);
         。。
}
//将对话框指针传给线程如果我在线程中调用(CXXXDlg *)pParam->SetWindowText()WaitForSingleObject(m_hThread, INFINITE);就不会返回去掉(CXXXDlg *)pParam->SetWindowText()就可以

解决方案 »

  1.   

    MFC 类不是线程安全的,跨越线程边界调用成员函数可能会出问题。
      

  2.   

    把 WaitForSingleObject 换成 MsgWaitForMultipleObjects 试试
      

  3.   

    还是传递句柄吧,然后发消息改变。发WM_SETTEXT消息
    SendMessage( m_hDlg, 0, (LPARAM)(LPCTSTR)lpsz )因为新创建的线程没有消息队列,而SetWindowText又是基于
    消息的函数。
      

  4.   

    首先就如上面各位所说,应该传递句柄,但这并不是问题的所在,原因很简单,因为楼主
    WaitForSingleObject(m_hThread, INFINITE);且
    SendMessage,PostMessage即可,但不会执行楼主Post的消息,直到此线程结束后才执行。SendMessage将会挂起调用线程,然后等待窗口的创建线程(也就是楼主调用WaitForSingleObject(m_hThread, INFINITE);的县城)处理Send的消息,而不幸地这个线程要处理调用线程Send过来的消息,必须调用GetMessage,不过这个线程此时正在
    WaitForSingleObject(m_hThread, INFINITE);
    而调用线程正在SendMessage等待这个线程处理它的消息,因此一个简单的死锁形成,故而无法退出。处理方法就是改为PostMessage,不过这样消息将会直到
    WaitForSingleObject(m_hThread, INFINITE);后才会处理
      

  5.   

    ustclancelot(Lance)说的有道理, 线程阻塞的根本原因在pParam->SetWindowText()
    这个函数根本就不会返回。