BOOL CTestCommDlg::OnInitDialog()
{
。。
m_hThread = CreateThread(NULL, 0, MyThreadProc, this, 0, NULL);
。。
}
//将对话框指针传给线程如果我在线程中调用(CXXXDlg *)pParam->SetWindowText()WaitForSingleObject(m_hThread, INFINITE);就不会返回去掉(CXXXDlg *)pParam->SetWindowText()就可以
{
。。
m_hThread = CreateThread(NULL, 0, MyThreadProc, this, 0, NULL);
。。
}
//将对话框指针传给线程如果我在线程中调用(CXXXDlg *)pParam->SetWindowText()WaitForSingleObject(m_hThread, INFINITE);就不会返回去掉(CXXXDlg *)pParam->SetWindowText()就可以
SendMessage( m_hDlg, 0, (LPARAM)(LPCTSTR)lpsz )因为新创建的线程没有消息队列,而SetWindowText又是基于
消息的函数。
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);后才会处理
这个函数根本就不会返回。