首页 基于VC_的MFC多线程通信程序的研究

基于VC_的MFC多线程通信程序的研究

举报
开通vip

基于VC_的MFC多线程通信程序的研究基于VC_的MFC多线程通信程序的研究 序的设计技术,包括使用全局变量、使用用户自定义消息这两种主要通信方式,研究了多线程通信程序的实现步骤。 关键词,多线程通信,MFC 程序,微软基础类库 中图分类号,TP311.11 文献标识码,A 文章编号,1672-7800,2009,05,0170,20 在一个多线程的程序中添加一个菜单项“Stop Thread”,并 引言0 且为它创建一个消息响应函数 OnStopThrea,,d。 然后声明一个 全局变量,Volatile int timer,关键字 Vol...

基于VC_的MFC多线程通信程序的研究
基于VC_的MFC多线程通信程序的研究 序的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 技术,包括使用全局变量、使用用户自定义消息这两种主要通信方式,研究了多线程通信程序的实现步骤。 关键词,多线程通信,MFC 程序,微软基础类库 中图分类号,TP311.11 文献标识码,A 文章编号,1672-7800,2009,05,0170,20 在一个多线程的程序中添加一个菜单项“Stop Thread”,并 引言0 且为它创建一个消息响应函数 OnStopThrea,,d。 然后声明一个 全局变量,Volatile int timer,关键字 Volatile 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 明这个变量可以 在 Windows应用程序开发 时 , 有两种主要方法 , 基 于在使用它的线程之外改变它的值。 接着在主线程的函数 On- WindowsAPI 的开发方法和基于 Windows MFC的开发方 法。 后 StopThread,,中添加一行代码, 者借助于其应用程序向导及类向导的帮助,简化了程序开发的 timer=0, 过程并减少了开发的工作量和难度,故获得广泛的应用。本文同时在开始创建线程代码中添加这样的代码, ++研究的重点就是基于 VC 的 MFC多线程通 信程序。 timer=1, AfxBeginThread,ThreadProc,hWnd, THREAD_PRIOR TY_NORMAL,, 线程的优先级状态1 在新线程的执行代码中这样写, While,timer= =1, 高的优先级可以使一个线程获得更多的 CPU时间 片 , 更 { 快地完成它的任务,或更及时地响应用户的输入。 但是设置线 //实际的线程工作, 程的优先级时要非常注意, 如果一组线程具有相同的优先级, AfxEndThread,0,, 则不论这组线程具有的优先级是高还是低,调度程序都会给它 } 们分配相同的处理器时间。线程的优先级是和这个线程所在的 AfxMessageBox,“线程中止了”,, 进程的优先级密切相关的。 进程的优先级一共有 4 个等级,如 return 0, 表 1 所示。 表 1 优先级状态说明表 现在,在程序中单击菜单项“StopThread”时,会弹出一个对 优先级优先级标志优先级数 话框告诉我们线程已经结束了。这个例子说明了全局变量相当空闲(Idle) IDLE_PRIORITY_CLASS 4 于一个控制键, 当时间用完时新线程从主线程中得到这个值,普通(Normal) NORMAL_PRIORITY_CLASS 9/7 发现符合结束的条件于是就自动中止了。使用全局变量实现线高(High) HIGH_PRIORITY_CLASS 13 ++实时(Realtime )程之间的通信适用于不复杂的线程之间通信。 若是对 VC处 REALTIME_PRIORITY_CLASS 24 理变量的过程不太了解的话,这个方法比较危险,容易引起一 些错误。 多线程通信程序的设计技术2 2.2 使用用户自定义的消息 Windows消 子线程与主线程的通信可以采用用户自定义 使用全局变量通信2.1 要使主线程具有停止某线程的能力,则需要一种通知该线 息的方法来实现。 首先要定义用户消息,定义的位置在相应的 头文件中,可以是这样,。 可以在程序中建立一个全局变量,接着让线程程停止的方法 监视这个全局变量。 当这个变量变为某值时,表示线程应该停 ConstWM _THREADEND=WMU_SER+10, 止了,这种方法比较简单和机械。 其用法示例如下, WM_USER常 数是由 Windows定义 的,它保留第一个可用 的用户消息号。 在应用程序中的其它部分出于各自的目的,需试”的菜单项, 要使用一些用户消息,所以在上面的代码中把用户消息号定义 第四步,修改工具条 IDR_MAINFRAM,E 添加一个工具条 按钮,并使之与 ID_MT_TEST相 关联, WM_USER+10。 为 然后在头文件把下面的代码加入消息映射第五步,双击对话框 ID_DIALOG_M,T为该对话框创建一 中,位置是在 AFX_MSG注释的后 面,在 DECLARE_MESSAGE_ 个类,基类为 Cdialog,类名为 CmtDIg,然后为对话框上各个控 MAP 的前面, 件生成相应的成员变量和控件通知消息的消息响应函数。 afx_msg LongOnThreadEnd ,WPARAM wParam, IDC_STATIC_MS,CStatiGc,m_Msg, IDC_PROGRES,SLPARAM_IParam,, CProgressCtr,m_Prlo, ID_MT_STAR,TCButon,m_Star,t接着在相应的.cpp 文件中将消息和处理函数联系在一起, BN_CLICKED,OnMtStart ON_MESSAG,WM_THREADENE, DonThreadEnd,, ,,, 定义了消息以后,在子线程的执行程序中调用,,PostMes- ID_MT_END,CButon,m_End,BN_CLICKED,OnMtEnd,,, sage,,把消息发送给主线程,子线程的执行函数可以是这样, IDOK,BN_CLICKED,OnOk,,, UINT ThreadPro,cLPVOIDPara m, 此外,还要为 WM_TIMER消息 添加一个消息响应函数,以 {//执行代码便更新进度条显示,添加 WM_INITDIALOG消 息的消息响应函 ,,PostMessag,,eHWND,Param,WM_HREADEN,D0,0,,} 数 OnInitDialo,,g,以便进行初始化, 在主线程的消息处理函数 On ThreadEn,,d中同样可以弹 第六步,修改 CMtDlg 类。 在该类的头文件,.h,的开头添加 出一个对话框, 一个事件对象和辅助线程的回调函数的定义, static CEventg_En d, LONG CMyThrea,d,OnThreadEnd ,WPARAM wParam, static UINT Ca,LPVOIDlpPa r,,//辅助线程回调函数, LPARAMIPara m, 定义一个自定义消息,将消息 ID 的定义添加在 CMtDIg 类 {AfxMessageBo,“x线程中止了”,, 的实现文件,.CPP,中, return 0, } 添加函数 void CMtDl,g,OnThreadStoppe,,d。 同样在 MtDlg.cpp的开头定 义一个全局 HWND 类型的变 运行这个例子会发现结果和使用全局变量一样,但是它们量,用于存储对话框句柄,从而使辅助线程也可以访问对话框, 的本质却是不同的。 使用全局变量是在子线程中将自己中止, 第七步,添加 CMtDIg类对 象, 在使用消息机制中却是在主线程中中止了子线程,这是因为子 第八步,编译并运行该工程 TT。 线程将消息告诉主线程,主线程响应消息中止了子线程。 3 多线程通信程序的实现步骤 本实现程序创建一个基于对话框的主线程,用户在其界面 结束语4 上选择“开始”按钮就创建了一个 CPU 密集型的计数过程来进 行没完没了的计数,直到用户选择“终止”按钮才终止这个耗时 ++ 总之, 在用 Visual CMFC 进行多线程通信程序开发时, 非常多的子线程,其间在进度条控件上显示进度。 若不采取线 所要做的具体编码式工作较少, 产生的代码都是标准化的模 程通信技术,则主线程将被阻塞相当长的一段时间,用户什么 块 ,只需根据应用的需要完成相应的常量 、 变量声明 、 响应函 都干不成,使用了辅助线程之后,用户就可以轻松地控制这个 数、消息映射函数的声明,并且实现各个具体的函数,借助于资 没完没了的循环了。 具体实现步骤如下, 源编辑器,设计好用户界面并将各控件与相应的响应函数连接 第一步,创建一个基于单文档的应用程序框架,取消 print 起来就可得到软件代码。 and print preview,选定 Single Documen,工程取名t为 TT。 其余 采用 AppWizard的默认设 置, 参考文献,第 二 步 , 在 应 用 程 序 中 添 加 一 个 ID 号 为 IDD_DIA- LOG_MT的普通对话 框。 其中,标 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 为“没有循环”的控件是一 杨 立 峰. 基 于 MFC 的 多 线 程 编 程 技 术 ,J,. 扬 州 职 业 大 学 学 报 , 1, ,个静态控件,ID 号为 IDC_STATIC_MS, G 进度条控件的 ID 号 2008,2,. 为 IDC_PROGRES, S 标 题 为 “ 开 始 ” 的 按 钮 控 件 的 ID 号 为 韩利凯.利用 SOCKET进 行网络通信程序设计,J,.西安联合大学 ,2, ID_MT_STAR,T 标 题 为 “ 终 止 ” 的 按 钮 控 件 的 ID 号 为 ,2002,4,. 学报ID_MT_END,“OK”按钮的 ID 号为 IDOK, 郭小梅.MFC 中文档 , 视图结构的应用,J,.南京晓庄学院学报,2001 第三步,修改菜单 IDR_MAINFRAM,E添加一个标题为“测 ,3, ,4,. ,责任编辑,杜能钢,
本文档为【基于VC_的MFC多线程通信程序的研究】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_591137
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-11-10
浏览量:17