有关线程间的通讯,原文如下:*********************************************************************************
*********************************************************************************
*********************************************************************************
用事件对象实现通信  在线程之间传递信号进行通信比较复杂的方法是使用事件对象,
用MFC的Cevent类的对象来表示。事件对象处于两种状态之一:
有信号和无信号,线程可以监视处于有信号状态的事件,
以便在适当的时候执行对事件的操作。例子代码修改如下:////////////////////////////////////////////////////////////////////
Cevent threadStart,threadEnd;////////////////////////////////////////////////////////////////////
UINT ThreadFunction(LPVOID pParam)
{
::WaitForSingleObject(threadStart.m_hObject,INFINITE);
AfxMessageBox("Thread start.");
while(!bend)
{
Beep(100,100);
Sleep(1000);
Int result=::WaitforSingleObject(threadEnd.m_hObject,0);
//等待threadEnd事件有信号,无信号时线程在这里悬停
If(result==Wait_OBJECT_0)Bend=TRUE;
}
::PostMessage(hWnd,WM_USERMSG,0,0);
return 0;
}/////////////////////////////////////////////////////////////
Void CtestView::OninitialUpdate()

hWnd=GetSafeHwnd();
threadStart.SetEvent();//threadStart事件有信号
pThread=AfxBeginThread(ThreadFunction,hWnd);//启动线程
pThread->m_bAutoDelete=FALSE;
Cview::OnInitialUpdate();
}////////////////////////////////////////////////////////////////
Void CtestView::OnDestroy()

threadEnd.SetEvent();
WaitForSingleObject(pThread->m_hThread,INFINITE);
delete pThread;
Cview::OnDestroy();
} 运行这个程序,当关闭程序时,才显示提示框,显示"Thread ended"*********************************************************************************
*********************************************************************************
*********************************************************************************但是我照上文所作的例子的结果却不是这样!代码如下:#define WM_END_THREAD WM_USER+100
CEvent threadStart,threadEnd;//... ...
//... ...BEGIN_MESSAGE_MAP(CMyAppView, CView)
//{{AFX_MSG_MAP(CMyAppView)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_MESSAGE(WM_END_THREAD, CMyAppView::OnThreadended)
END_MESSAGE_MAP()
//Set to True to end thread
BOOL bend=FALSE;//定义的全局变量,用于控制线程的运行
CWinThread *pThread;
HWND hWnd;UINT ThreadFunction(LPVOID pParam)//线程函数
{
::WaitForSingleObject(threadStart.m_hObject,INFINITE);
AfxMessageBox("Thread start.");
while(!bend)
{
Beep(100,100);
Sleep(1000);
int result=WaitForSingleObject(threadEnd.m_hObject,0);
//等待threadEnd事件有信号,无信号时线程在这里悬停
if(result==WAIT_OBJECT_0)
bend=TRUE;
}
::PostMessage(hWnd,WM_END_THREAD,0,0);
return 0;
}////////WM_USERMSG消息的响应函数为OnThreadended(WPARAM wParam,LPARAM lParam)
LONG CMyAppView::OnThreadended(WPARAM wParam,LPARAM lParam)
{
AfxMessageBox("Thread ended.");
return 0;
}void CMyAppView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class hWnd=GetSafeHwnd();
threadStart.SetEvent();//threadStart事件有信号
pThread=AfxBeginThread(ThreadFunction,hWnd);//启动线程
pThread->m_bAutoDelete=FALSE;
}void CMyAppView::OnDestroy() 
{
threadEnd.SetEvent();
WaitForSingleObject(pThread->m_hThread,INFINITE);
delete pThread;

CView::OnDestroy();
//TODO: Add your message handler code here
}问题:关掉程序时,并没有出现CMyAppView::OnThreadended()里面的 AfxMessageBox("Thread ended.");