当前位置: 首页 > news >正文

MFC四种方法编写多线程

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

mfc多线程demo1

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

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

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

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创建线程进度条

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);
}
http://www.lryc.cn/news/369956.html

相关文章:

  • VPN简介
  • 【C/C++】用C语言写一个数据仓库,存储和修改数据
  • YOLO v5与YOLO v8框图比较
  • Redis集群(5)
  • STM32H5 DAC 配置
  • 第十九节:暴力递归到动态规划
  • 服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了
  • 2024备忘知识点
  • JS基础与高级应用: 性能优化
  • Python | Leetcode Python题解之第145题二叉树的后序遍历
  • 公司面试题总结(二)
  • 人脸识别和 ArcFace:用于深度人脸识别的附加角边际损失
  • 双标引领:汽车软件安全的ASPICE与ISO21434之道
  • 再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!
  • 大疆智图_空三二维重建成果传输
  • python实现无人机航拍图片像素坐标转世界坐标
  • C#面:什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同
  • Java基础面试题自测
  • 【LeetCode 第 401 场周赛】K秒后第 N 个元素的值
  • 游戏心理学Day10
  • MySQL表设计经验汇总篇
  • Servlet基础(续集2)
  • 【云原生】创建harbor私有仓库及使用aliyun个人仓库
  • 什么是SOLIDWORKS科研版
  • 微信小程序页面配置
  • 如何将JPG/PNG位图免费快速一键转换成SVG格式的矢量图
  • YOLO检测环境安装配置
  • NOSQL -- ES
  • 【Python基础】名称空间和作用域
  • 安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能