MFC 多线程例子

1.直接贴代码

// CMultiThreadDlg 对话框
class CMultiThreadDlg : public CDialogEx
{
...
public:
	volatile BOOL ThreadFlag;
	afx_msg void OnBnClickedButtonOpen();
}


BOOL CMultiThreadDlg::OnInitDialog()
{
...

	// TODO: 在此添加额外的初始化代码
	ThreadFlag = FALSE;

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

UINT ChildThread(LPVOID Param)	//一个线程入口函数,CPU同时执行MFC的主线程和ChildThread线程函数
{

	CMultiThreadDlg* pDlg = (CMultiThreadDlg*) Param;//创建一个指向主对话框的句柄

	CString str;

	int ThreadCount = 1;
	while (pDlg->ThreadFlag)
	{
		str.Format(_T("子线程开启第%d次"), ThreadCount++);
		pDlg->GetDlgItem(IDC_EDIT_CHILD)->SetWindowText(str);	
		Sleep(1000);//定时1秒钟
	}
	return 0;		//AfxBeginThread线程的关闭,利用函数执行完毕后,自动返回,然后创建的线程也跟着关闭,对应资源也跟着释放。
}



void CMultiThreadDlg::OnBnClickedButtonOpen()
{
	// TODO: 在此添加控件通知处理程序代码
	if (ThreadFlag == TRUE)
	{
		//关闭线程函数
		ThreadFlag = FALSE;
		SetDlgItemText(IDC_BUTTON_Open, _T("打开线程")); 
		return;
	}
	else
	{
		//创建线程函数
		ThreadFlag = TRUE;
		HANDLE hMultiThread = AfxBeginThread(ChildThread, /*(LPVOID)*/this, THREAD_PRIORITY_IDLE);
		SetDlgItemText(IDC_EDIT_MAIN, _T("主线程开启")); 		
		SetDlgItemText(IDC_BUTTON_Open, _T("关闭线程"));		
		return;
	}
}
  1. 实际效果
    MFC 多线程例子_第1张图片
    MFC 多线程例子_第2张图片
    参考内容:
    https://blog.csdn.net/naibozhuan3744/article/details/78754614

你可能感兴趣的:(VS2012)