MFC 线程学习笔记



效果图如下:

MFC 线程学习笔记_第1张图片



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();
}
 

你可能感兴趣的:(MFC 线程学习笔记)