效果图如下:
1.在.h头文件中声明:
HANDLE m_hTread;//声明线程句柄
CWinThread* m_pThread;
2.在.c文件中声明如下
其中:
CreateThread函数与 SuspendThread(m_hTread);//挂起线程,ResumeThread(m_hTread);,TerminateThread(m_hTread,0); 配合使用。
倘若用AfxBeginThread函数的话,这三个函数貌似没反应 SuspendThread(m_hTread);//挂起线程,ResumeThread(m_hTread);,TerminateThread(m_hTread,0);
/* 5-1
//DWORD _stdcall
static DWORD
THreadProc(LPVOID lpParameter)
{
CMy51Dlg* pDlg=(CMy51Dlg*)lpParameter;
CString str;
for(int i=0;i<9999;i++)
{
str.Format(_T("%d"),i);
pDlg->m_Edit.SetWindowText(str);
pDlg->m_Edit.Invalidate();
}
return 0;
}
*/
//DWORD _stdcall
/*5-2
static DWORD
THreadProc(LPVOID lpParameter)
{
CMy51Dlg* pDlg=(CMy51Dlg*)lpParameter;
//CString str;
pDlg->m_Prog.SetRange32(0,999999);
for(int i=0;i<999999;i++)
{
pDlg->m_Prog.SetPos(i);
}
return 0;
}*/
//5-3
UINT THreadProc(LPVOID lpParameter) //UINT 声明很关键,否则会报错
{
CMy51Dlg* pDlg=(CMy51Dlg*)lpParameter;
//CString str;
pDlg->m_Prog.SetRange32(0,999999);
for(int i=0;i<999999;i++)
{
pDlg->m_Prog.SetPos(i);
}
return 0;
}
void CMy51Dlg::OnBnClickedOk()//创建线程
{
// TODO: 在此添加控件通知处理程序代码
//m_hTread=AfxBeginThread(THreadProc,this,0,0,0,NULL);
m_hTread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)THreadProc,this,0,NULL);
//CDialogEx::OnOK();
}
void CMy51Dlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
/*
DWORD dwExit=0;
if(m_pThread != NULL)
{
GetExitCodeThread(m_pThread,&dwExit);
if(dwExit == STILL_ACTIVE)
TerminateThread(m_pThread,0);
delete m_pThread;
}*/
//
TerminateThread(m_pThread,0);
//
delete m_pThread;
//
CDialogEx::OnCancel();
SuspendThread(m_hTread);//挂起线程
}
void CMy51Dlg::OnBnClickedButton1()//恢复线程
{
// TODO: 在此添加控件通知处理程序代码
ResumeThread(m_hTread);
}
void CMy51Dlg::OnBnClickedButton2()//终止线程
{
// TODO: 在此添加控件通知处理程序代码
TerminateThread(m_hTread,0);
}
void CMy51Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnCancel();
}