判断线程结束解决办法

判断线程结束
void Func()
{
  m_hDetailThread = AfxBeginThread(_ThreadContactDetail,this,THREAD_PRIORITY_NORMAL);
  //判断线程结束。结束后要处理一些事情。
  .............. //代码如何编写  
  //判断已经结束后
  OtherFunc();
}

请问这个要如何判断其结束。最好有代码。

------解决方案--------------------
线程结束后,发个事件
或者WaitForSingleObject
------解决方案--------------------
// 阻塞直到线程结束.
while(WAIT_OBJECT_0 != MsgWaitForMultipleObjects(1, &m_hDetailThread, FALSE, INFINITE, QS_ALLINPUT)) 
{
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
------解决方案--------------------
1楼正解
------解决方案--------------------
在return 0前发事件
------解决方案--------------------
C/C++ code
#include "stdafx.h"

#include <iostream>
using namespace std;

UINT __cdecl ThreadProc(LPVOID lParam)
{
    cout<<"Work thread start!!!"<<endl;
    for(int i=0; i<10; i++)
    {
        cout<<"Thread cout: "<<i<<endl;
        Sleep(500);
    }
    cout<<"Work thread end!!!"<<endl;
    return 0;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    CWinThread* pThread = AfxBeginThread(ThreadProc, NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL);
    pThread->m_bAutoDelete = FALSE;
    HANDLE hThread = pThread->m_hThread;
    pThread->ResumeThread();

    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    delete pThread;
    pThread = NULL;

    cout<<"main thread end!"<<endl;
    return 0;
}

------解决方案--------------------
楼上的代码有问题哈

WaitForSingleObject(hThread->m_hObject, INFINITE);

可以哈