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. 实际效果
    在这里插入图片描述
    在这里插入图片描述
    参考内容:
    https://blog.csdn.net/naibozhuan3744/article/details/78754614
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值