当前位置: 首页 > 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);
}

相关文章:

  • 从“数据孤岛”、Data Fabric(数据编织)谈逻辑数据平台
  • 基于百度地图WebGL版二次开发的数据可视化大屏(白天黑夜模式自动切换、标注聚合功能、历史路线轨迹查询)
  • Linux--MQTT(二)通信基本原理
  • 【Python】Python 2 测试网络连通性脚本
  • GenericObjectPool对象池化的介绍与用法
  • Linux在创建用户的时候遇到的错误:useradd: Permission denied.useradd:无法锁定 /etc/passwd,请稍后再试。
  • LeetCode | 434.字符串中的单词数
  • 数据结构之链表的经典笔试题
  • C++笔试强训day42
  • 【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议
  • 有趣的傅里叶变换与小波变换对比(Python)
  • Redis系列-4 Redis集群介绍
  • Linux基础指令(二)(文件、权限等)
  • CAN测试工具——BUSMASTER
  • 访问api是如何使用的
  • [LeetCode] Wiggle Sort
  • C++入门教程(10):for 语句
  • go语言学习初探(一)
  • JavaWeb(学习笔记二)
  • Next.js之基础概念(二)
  • Python - 闭包Closure
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 构建工具 - 收藏集 - 掘金
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端设计模式
  • 软件开发学习的5大技巧,你知道吗?
  • Spring Batch JSON 支持
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #微信小程序(布局、渲染层基础知识)
  • (1)Android开发优化---------UI优化
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)winform之ListView
  • (转载)Linux 多线程条件变量同步
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理出现中文乱码的情况
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net mvc 获取url中controller和action
  • .net web项目 调用webService
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .Net6 Api Swagger配置
  • .NET成年了,然后呢?
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET框架
  • .NET企业级应用架构设计系列之技术选型
  • [ 数据结构 - C++]红黑树RBTree
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [20161214]如何确定dbid.txt
  • [ABC294Ex] K-Coloring
  • [AIGC codze] Kafka 的 rebalance 机制
  • [autojs]autojs开关按钮的简单使用
  • [C++]Leetcode17电话号码的字母组合
  • [C++打怪升级]--学习总目录