MFC四种方法编写多线程

本文以四个demo为例,对MFC的多线程进行学习。学习的过程中写了四个demo,将其做成笔记,发布在csdn上面。

mfc多线程demo1

cpp 复制代码
volatile BOOL m_bRun;
CEdit* edit;
void ThreadFunc(){
	CTime time;
	CString strTime;
	m_bRun = true;
	while(m_bRun){
		time = CTime::GetCurrentTime();
		strTime = time.Format("%H:%M:%S");
		//::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT1,strTime);
		edit->SetWindowText(strTime);
		Sleep(1000);

	}

}

void CmfcMultiThread02Dlg::OnBnClickedButton1()
{
	// 作死卡死
	edit = &m_list;

	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,&ThreadID);
	btn1.EnableWindow(FALSE);
	btn2.EnableWindow(TRUE);
}



void CmfcMultiThread02Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	m_bRun = FALSE;
	btn1.EnableWindow(TRUE);
	btn2.EnableWindow(FALSE);
}

mfc多线程demo2

cpp 复制代码
volatile BOOL m_bRun;
CEdit* edit;
void ThreadFunc(int n){
	int i ;
	for( i = 0;i< n;i++){
		Sleep(1000);
	}

}

void CmfcMultiThread02Dlg::OnBnClickedButton1()
{
	// 作死卡死
	UpdateData(TRUE);  
	int n=2;  
	hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, (VOID*)n, 0, &ThreadID);  
	btn1.EnableWindow(FALSE);  
	WaitForSingleObject(hThread,INFINITE);  
	btn2.EnableWindow(TRUE);  

}



void CmfcMultiThread02Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	m_bRun = FALSE;
	btn1.EnableWindow(TRUE);
	btn2.EnableWindow(FALSE);
}

mfc多线程demo3

cpp 复制代码
struct threadInfo{
	UINT	 nMilliSecond;
	CProgressCtrl* pctrlProgress;
};
threadInfo info;
UINT ThreadFunc(LPVOID lpParam){
	threadInfo* pInfo = (threadInfo*)lpParam;
	for(int i = 0;i < 100;i++){
		int nTemp = pInfo->nMilliSecond;
		pInfo->pctrlProgress->SetPos(i);
		Sleep(nTemp);

	}
	return 0;

}
void CmfcMultiThread02Dlg::OnBnClickedButton1()
{
	// 作死卡死
	UpdateData(TRUE);  
	info.nMilliSecond = 50;
	info.pctrlProgress = &progress1;
	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc, &info, 0, &ThreadID);

}

mfc创建线程数统计demo4

cpp 复制代码
volatile BOOL m_bRunFlag = TRUE;
DWORD WINAPI threadFunc(LPVOID threadNum){
	while(m_bRunFlag){
		Sleep(3000);

	}
	return 0;

}
void CmfcMultiThread02Dlg::OnBnClickedButton1()
{
	// 作死卡死
	DWORD threadID;
	btn1.EnableWindow(FALSE);
	long nCount = 0;
	while(m_bRunFlag){
		if(CreateThread(NULL,0,threadFunc,NULL,0,&threadID) == NULL){
			m_bRunFlag = false;
			break;
		}else{
			nCount++;
		}

	}

	UpdateData(FALSE);
	Sleep(5000);
	btn1.EnableWindow(TRUE);
	CString tempPort;
	tempPort.Format(_T("%d"), nCount );
	m_list.SetWindowText(tempPort);
	m_bRunFlag = TRUE;
}

mfc创建线程进度条

cpp 复制代码
struct threadInfo{
	UINT nMillSecond;
	CProgressCtrl* pctrlProgress;

}info;

UINT ThreadFunc(LPVOID lpParam){
	threadInfo* pInfo = (threadInfo*) lpParam;
	for(int i = 0;i< 100;i++){
		int nTemp = pInfo->nMillSecond;
		pInfo->pctrlProgress->SetPos(i);
		Sleep(nTemp);
	}
	return 0;


}
void CmfcMultiThread02Dlg::OnBnClickedButton1()
{
	// 作死卡死
	UpdateData(TRUE);
	info.nMillSecond = 10;
	info.pctrlProgress = &progress1;
	pThread = AfxBeginThread(ThreadFunc,&info);
}
相关推荐
依然鸣几秒前
PTA团体程序设计天梯赛L2真题讲解L2-045-048
数据结构·c++·经验分享·学习·算法·pat考试·pat
有点。5 分钟前
C++深度优先搜索(二)
开发语言·c++·深度优先
小小龙学IT1 小时前
Taskflow:用一张“任务图“玩转现代 C++ 并行编程开源项
c++·开源·github
wuminyu2 小时前
JUC包的AQS与JVM的ObjectMonitor机制对比分析
java·linux·c语言·jvm·c++
就不掉头发2 小时前
C++函数模板
java·开发语言·c++
王老师青少年编程3 小时前
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷(汇总)
c++·模拟卷·2026年·青少年信息素养大赛·算法应用主题赛·决赛
思麟呀4 小时前
C++(八):文件系统库+并行算法
开发语言·c++
啊啊啊啊啊!!!!16 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
(Charon)19 小时前
【C++】锁与原子操作(四):自旋锁的完整实现与性能优化
c语言·开发语言·c++
ShineWinsu20 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl