// MtDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MultiThread.h"
#include "MtDlg.h"
#include "afxmt.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMtDlg dialog#define WM_THREADFINISHED  WM_USER+100
static HWND hW;CMtDlg::CMtDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMtDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMtDlg)
m_Msg = _T("");
//}}AFX_DATA_INIT
}
void CMtDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMtDlg)
DDX_Control(pDX, IDC_PROGRESS, m_Pro);
DDX_Control(pDX, ID_MT_START, m_Start);
DDX_Control(pDX, ID_MT_END, m_End);
DDX_Text(pDX, IDC_STATIC_MSG, m_Msg);
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CMtDlg, CDialog)
//{{AFX_MSG_MAP(CMtDlg)
ON_BN_CLICKED(ID_MT_END, OnMtEnd)
ON_BN_CLICKED(ID_MT_START, OnMtStart)
ON_WM_TIMER()
ON_MESSAGE(WM_THREADFINISHED,OnThreadFinished)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMtDlg message handlers
void CMtDlg::OnOK() 
{
KillTimer(1);
g_End.SetEvent();
CDialog::OnOK();
}
void CMtDlg::OnMtEnd() 
{
g_End.SetEvent();
KillTimer(1);
m_Pro.SetPos(0);
m_Start.EnableWindow(TRUE);
m_End.EnableWindow(FALSE);
}
void CMtDlg::OnMtStart() 
{
// TODO: Add your control notification handler code here
AfxBeginThread(Cal,GetSafeHwnd());
SetTimer(1,500,NULL);
m_Start.EnableWindow(FALSE);
m_End.EnableWindow(TRUE);
}
void CMtDlg::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
m_Pro.StepIt();
CDialog::OnTimer(nIDEvent);
}
BOOL CMtDlg::OnInitDialog() 
{
hW=GetSafeHwnd();
CDialog::OnInitDialog();
m_Pro.SetRange(0,200);
m_Pro.SetPos(0);
m_End.EnableWindow(FALSE);
g_End.ResetEvent();
return TRUE;  // return TRUE unless you set the focus to a control
              
}
UINT CMtDlg::Cal(LPVOID pPar)//辅助线程的回调函数
{
int i;
CString str;
CRect rc;
for(i=0;i<1e5;i++)
{
str.Format("第%d次循环",i);
::SetDlgItemText(hW,
            IDC_STATIC_MSG,
str);
if(::WaitForSingleObject(g_End,0)==WAIT_OBJECT_0)
{
break;
}
}
return 0;
}
void CMtDlg::OnThreadFinished()
{
AfxMessageBox("线程结束!");
}当线程执行结束时应该输出“线程结束!”,可为什么没有?这是部分主要代码!请高手指点!