当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

Windows NT环境下基于多线程的面向对象应用系统设计

资源类别:文库,文档格式:PDF,文档页数:6,文件大小:459.86KB,团购合买
以Windows NT为背景,提出了设计多线程进程与实现多进程启停同步的面向对象的表驱动方法,给出了1种通用的实现框架.基于该框架设计多任务应用,可充分利用系统资源,实现多个任务的并发执行.
点击下载完整版文档(PDF)

D0I:10.13374/j.1ssm1001-053x.1997.05.015 第19卷第5期 北京科技大学学报 Vol.19 No.5 1997年 10月 Journal of University of Science and Technology Beijing 0ct.1997 Windows NT环境下基于多线 程的面向对象应用系统设计 王成耀李秀山 庞伟 北京科技大学信息工程学院,北京100083 摘要以Windows NT为背景,提出了设计多线程进程与实现多进程启停同步的面向对象的表驱 动方法,给出了1种通用的实现框架.基于该框架设计多任务应用,可充分利用系统资源,实现多 个任务的并发执行, 关键词多进程,多线程,同步,Windows NT 中图分类号TP3I1 进程是指应用程序的1个执行实例,线程是进程的1条执行路径.每个进程可以包括多 个并发执行的线程.作为I个抢占式多任务操作系统,Windows NT为建立多进程、多线程应 用提供了支持,采用多进程、多线程设计应用系统,不仅可以使多个任务以不同的优先级 并发执行,而且可提高执行效率,尤其在多处理机系统中, 1多进程、多线程及其同步 多进程、多线程是1种把应用系统划分为进程,把进程划分为线程,并按照预先指定的进 程与线程优先级分配每个线程各自享用CPU时间的技术.当应用的多个任务相对独立,可将 其划分为多个可执行模块,而且具有高内聚低耦合时,可将其设计为多进程,不仅便于任务分 工,增强设计的独立性,同时可提高系统的并行性,另外,当同一进程的几个任务需并发执行 或者有耗时的后合任务要处理时,宜采用多线程. 多线程应用在数据存取方面比单线程应用需要更严格的考虑,当多个线程要访问同一 资源时,必须借助于互斥量、信号量、事件和临界区等对象,同步对共享资源的访问, 选取同步对象时,一般可遵循下列准则: 1)若应用程序在执行某任务时必须等待某事件发生,此时可用事件.若事件发生后,要释 放所有等待线程,则选择手动复位事件,否则用自动复位事件. 2)当应用中的多个线程要同时访问共享资源时,若该资源同时只允许1个线程访问,则 选择互斥量;若该资源同时只允许有限个线程访问,则选择信号量, 3)若同一进程的多个线程要访问共享资源,而该资源同时只允许1个线程访问,此时可 用临界区:虽然亦可用互斥量,但使用临界区更快速、简洁, 1996-12-30收稿第一作者男30岁讲师硕士

第 卷 年 第 期 月 北 京 科 技 大 学 学 报 叹天 。 环境下基于 多 线 程 的面 向对象应用 系 统设计 王 成耀 李秀山 庞 伟 北京科技大学信息工 程 学 院 , 北 京 摘要 以 为背景 , 提 出 了设计多线程进程 与实现多进程启停 同步 的面 向对象 的表驱 动方法 , 给 出 了 种 通 用 的实现框架 基于 该框架设计多任务应 用 , 可 充分利用 系 统资源 , 实现多 个任务 的并 发执行 关键词 多进程 , 多 线程 , 同步 , 中图分类号 仰 进 程 是 指 应 用程 序的 个 执行 实 例 , 线程是 进程 的 条 执行路 径 每个 进 程 可 以 包括 多 个并 发 执行 的线程 作 为 个抢 占式 多任务操作 系统 , , 为建立多 进程 、 多 线程 应 用 提供 了 支持 川 采 用多 进程 、 多 线 程 设 计 应 用 系 统 , 不 仅可 以 使多 个 任 务 以 不 同 的优 先 级 并 发 执行 , 而且 可 提 高执行 效率 , 尤其在多处理 机 系 统 中 多进程 、 多线程及其同步 多进程 、 多 线程是 种把应用 系 统划分 为进程 , 把进程 划分 为线程 , 并 按 照 预先指 定 的进 程 与 线程 优先级分 配每个 线程各 自享 用 时 间的技术 当应 用 的多个任务相 对独立 , 可 将 其划 分 为多个可 执行模块 , 而且具有 高 内聚低祸合 时 , 可将其设计 为多进 程 , 不 仅便 于 任务分 工 , 增 强 设计 的独 立性 , 同时 可提 高 系 统 的并 行性 另 外 , 当同一 进 程 的几 个 任务 需 并 发 执 行 或者 有 耗 时 的后合任务要处理 时 , 宜采用 多 线程 , 多 线 程应用在数据存取 方 面 比单线程 应用需 要 更严格 的考虑 当多 个 线程要 访 问 同一 资源 时 , 必 须借助于 互斥量 、 信号量 、 事件和 临界 区 等对象 , 同步 对共享 资源 的访 问 选取 同步 对象 时 , 一般 可遵 循 下 列 准则 若应用程序在 执行某 任务 时必 须等待某事件 发 生 , 此 时可 用事 件 若事件 发生后 , 要 释 放所有等待线程 , 则 选择手 动复位 事件 , 否 则用 自动复位 事件 当应 用 中的多 个线程要 同 时访 问共 享 资源 时 , 若 该 资源 同时 只 允 许 个 线 程 访 问 , 则 选择互斥 量 若该 资源 同时只允许有 限个线程访 问 , 则 选 择信号 量 若 同一 进 程 的多 个 线程要 访 问共 享 资源 , 而 该 资源 同 时 只 允 许 个 线 程 访 问 , 此 时 可 用 临界 区 虽 然 亦 可 用互斥 量 , 但使用 临界 区 更快速 、 简 洁 一 一 收 稿 第一作 者 男 岁 讲师 硕 士 DOI :10.13374/j .issn1001-053x.1997.05.015

·486· 北京科技大学学报 1997年第5期 2多线程进程的设计 2.1设计思想 为了增强设计的通用性,达到代码复用,采用面向对象的表驱动方法.将进程所处理的任 务分解为具有不同优先级和可并发执行的子任务,通过归类,以任务类型码标识,为每类任务 设计相应的处理函数,并以任务表的形式加以描述,将任务信息及线程的创建与同步等操作 封装于多线程类CMultiThread.当进程的主线程收到任务处理消息时,根据任务类型码搜索 任务表,以一个CMultiThread对象完成线程的动态创建,协调线程间的同步, 2.2多线程类CMultiThread的实现 (1)数据结构. ①任务信息TASKINFO:包括任务类型码、任务优先级、任务处理函数等. ②CMultiThread类的主要数据成员与成员函数: ·UINT m_nMaxThreadNum:可并发执行的线程数最大值. ·CSemaphore*m_pSemaThread:信号量对象指针, ·CSingleLock'*m_pSThreadLock:线程锁,控制单个进程中并发执行的线程数. ·CMutex*m_pMutex ForDB:互斥对象指针, ·CSingleLock*m pSDBLock:数据库锁,控制多个线程对DB的访问. ·TASKINFO*m_pTaskTable::任务表指针. ·CMultiThread(TASKINFO*):构造函数,设置m pTaskTable. ·void StartThread(char*,UINT:线程启动函数, ·void InitThread():线程初始化函数. ·void ThreadLock():用于控制单个进程中并发执行线程数的Lock函数. ·void ThreadUnlock():用于控制单个进程中并发执行线程数的Unlock函数. ·void DBLock():用于控制多个进程对DB访问的Lock函数. ·void DBUnlock():用于控制多个进程对DB访问的Unlock函数. (2)线程启动与初始化函数的实现算法. Algorithm InitThread() { 从.NI文件中读取线程最大数及对数据库访问的互斥对象名; 创建信号量对象m pSemaThread与互斥对象m pMutex ForDB; 创建相关的Lock对象m pSThreadLock与m pSDBLock; } Algorithm StartThread(char*pMsg,UINT nLen) { 根据长度为nLen的字节流pMsg,设置任务类型码nTaskCode; 以nTaskCode搜索任务表m pTaskTable,找匹配项;

· 北 京 科 技 大 学 学 报 年 第 期 多线程进程 的设计 设计 思想 为 了增 强 设计 的通 用 性 , 达 到代码 复用 , 采 用 面 向对象 的表驱 动方法 将进 程所处理 的任 务分解 为具有不 同优先级 和 可 并 发 执行 的子任务 , 通 过 归类 , 以任务类 型码标识 , 为每类 任务 设计 相 应 的处理 函 数 , 并 以 任务 表 的形 式 加 以 描 述 将 任务 信息及 线 程 的创 建 与 同步 等操 作 封 装 于 多 线 程 类 当进 程 的主 线 程 收到 任务处理 消 息 时 , 根 据 任务 类 型 码 搜 索 任务表 , 以 一个 对象完成 线程 的动态创建 , 协调 线程 间的 同步 多线程 类 的实现 数据结 构 ① 任务信 息 包括任务类型码 、 任务优先级 、 任务处理 函 数等 ② 类 的主要 数据成员 与成员 函数 ’ 可并 发执行 的线程 数最 大值 · 一 信号量 对象指 针 · 线程 锁 , 控 制单个进程 中并 发执行 的线 程数 · 互斥 对象指针 · 一 数据库锁 , 控 制 多个线程 对 的访 问 · 任务 表指 针 · 构造 函数 , 设 置 夕 · , 线程 启 动 函数 · 五 线程 初 始化 函 数 · 用 于 控 制单个进 程 中并 发执行 线程 数 的 函数 · 用 于 控 制单个 进 程 中并 发 执行 线程 数 的 函数 · 用 于 控 制 多个 进程 对 访 问的 函数 · 用 于 控 制多 个进 程 对 访 问的 函 数 线 程启 动 与初始 化 函 数 的实 现算法 从 文件 中读 取 线程 最 大 数及 对数据 库访 问的互 斥 对象名 创建信号 量 对象 一 与互斥 对象 夕 创建相 关 的 对象 夕 与 夕 】 , 根据 长度 为 的字节 流 , 设置 任务类 型码 以 搜索任务 表 , 找 匹 配项

Vol.19 No.5 王成耀等:Windows NT环境下基于多线程的面向对象应用系统设计 ·487· Lock信号量对象m pSemaThread; 创建并启动相应的线程函数; } 2.3应用 (I)在INI文件中定义线程数最大值以及对DB的互斥对象名等,如 [THREADS]MAX THREAD NUM=5 MUTEX NAME FOR DB DATABASE (2)将任务分类,构造任务表pTaskTable. (3)构造CMultiThrdad对象,如 CMultiThread the MultiThread(pTaskTable); (4)定义并实现相应的任务处理函数, UINT TaskProc1(LPVOID pParam) ∥任务处理 the MultiThread.ThreadUnlock() return 0; 若任务处理函数涉及对DB的写操作,则在每个事务(transaction)开始前及结束后,分别 调用theMultiThread..DBLock()与theMultiThread.DBUnlock()函数. (5)在进程初始化部分,调用the MultiThread.InitThread(). (6)当进程的主线程收到任务处理消息时,以数据起始地址及长度为参数调用 theMultiThread.StartThread(),动态创建并启动相应线程. 3多进程启停的同步 在多进程应用系统中,各进程之间因协作完成一项任务和对资源的共享,不可能彼此完 全独立地运行,存在着相互依赖和相互制约的关系,这些具有伙伴关系的进程在执行次序上 必须遵循某种确定的规律.就好象工业生产中的流水作业,每一道工序都有自己的特定任 务,它们协同作业才能完成产品的生产,在前一道工序未完成或加工质量不合格时,后一道工 序就不能进行不去,多个进程启停时,亦是如此,即一个进程的启(停)必须在另一进程或另几 个进程到达特定启(停)状态时才能继续,因此,提出面向对象的分步启停方法, 3.1设计思想 采用分步启停,将每个进程的启停分为若干步,如N1个启步,2个停步,每步对应一种 状态,取值为: READY:就绪态,即完成初始化, STARTUP+i(O≤i<NI):启态i,即完成第i个启步

王 成耀等 环境 下 基于 多线程 的 面 向对象应用 系 统设计 信号量 对象 创建 并 启 动相 应 的线程 函数 应 用 在 文件 中定 义线 程数最大值 以 及 对 的互 斥 对象名等 , 如 」 」 将任务分类 , 构造 任务表 构造 对象 , 如 定 义 并 实 现相应 的任务处理 函数 刀 任务处理 若任务处理 函 数涉及 对 的写操作 , 则在 每个 事务 咖 开始 前及 结 束后 , 分 别 调用 与 五 函 数 在进程初始化部分 , 调 用 当 进 程 的 主 线 程 收 到 任 务 处 理 消 息 时 , 以 数 据 起 始 地 址 及 长 度 为 参 数 调 用 七 七 , 动态创建并启 动相 应 线程 多进程启停 的同步 在 多 进 程 应 用 系 统 中 , 各进 程 之 间 因协作完 成 一 项 任务 和 对 资源 的共 享 , 不 可 能 彼 此 完 全独 立 地 运 行 , 存在 着 相 互 依 赖和 相 互 制 约 的关 系 , 这 些 具 有 伙 伴 关 系 的进 程 在 执 行 次序 上 必 须 遵 循 某 种 确 定 的规 律 就 好 象 工 业 生 产 中 的 流 水作 业 , 每 一 道 工 序 都有 自己 的特 定 任 务 , 它们协 同作 业才能完成产 品的生 产 , 在前 一道 工 序未 完 成 或加 工 质 量 不 合格 时 , 后 一 道 工 序就不 能进 行不 去 多 个进程 启停 时 , 亦是 如此 , 即一 个进程 的启 停 必须 在另 一 进程 或另几 个进程 到 达特定启 停 状 态 时才 能继续 , 因此 , 提 出面 向对象 的分步启停 方法 设计 思想 采 用 分步 启停 , 将 每个 进 程 的启停 分 为 若 干步 , 如 个 启 步 , 个停 步 , 每 步 对应 一 种 状 态 , 取值 为 就绪态 , 即完成初 始化 夕 启态 , 即完成 第 个启步

·488· 北京科技大学学报 1997年第5期 SHUTDOWN+i(0sim nStartStatusCount break; 向各进程主窗口发送WM STARTUP消息,WPARAM参数值为nStatusIndex; nStatusIndex++; Algorithm ShutProcess()

北 京 科 技 大 学 学 报 停 态 , 即完成第 个停 步 年 第 期 〕 ‘ 定 义 消 息 启进程 消息 , 以 参数表示 启步 停 进程 消息 , 以 参数表示停步 为每个状态设 置 一个事件 , 以 “ 进程 主 窗 口 名 状 态名 ” 作 为事件 名 , 控 制 进 程 启停 的 同 步 将 进 程 与 启 停 状 态 信 息 及 其 操 作 封 装 于 一 个 多 进 程 类 , 设 计 一 个 协 同进 程 , 构 造 对象完成各进程 的启停 , 达到进程 间 的启停 同步 多进程类 的实现 数据结构 ① 进 程 信息 包括进 程 号 、 进程 名 、 进程 可 执行 文件 名 、 进 程 主 窗 口 名 和 进程 优先级等 ②状态信息 包括状态值 和状态名等 ③ 类 的主要 数据成 员及成员 函数 · 进程 数 · 进程 表 ’ , 进程 启 停 状态数 · , 处 进程启 停 状态 表 , , , , , 】 构造 函 数 , 设置进程 数 、 进 程表 以 及进 程启 停 状态数 与启 停 状态表 ’ 启进程 函数 ’ 停进 程 函 数 多 进 程启 停 函 数 的实现算法 根 据进 程 表 , 创建 所有 进 程 叹 构 造 个 手 动 复 位 事 件 , 名 为 “ 进 程 主 窗 口 名 第 个 启 态 名 ” 构造 与之相 关 的 对象 向各进程 主 窗 口 发送 消息 , 参数值 为

Vol.19 No.5 王成耀等:Windows NT环境下基于多线程的面向对象应用系统设计 ·489· { UINT nStatusIndex =0; for (;; { if nStatusIndex >m nShutStatusCount break; 向各进程主窗口发送WM SHUTDOWN消息,NPARAM参数值为nStatusIndex; 构造m nProcessCount个手动复位事件,其名为“进程主窗口名+第nStatusIndex个停态 名”; 构造与之相关的CMultiLock对象mLock; mLock.Lock(); nStatusIndex++; 向各进程主窗口发送WM CLOSE消息,停所有进程; } 3.3应用 (1)定义进程表. (2)定义启状态表与停状态表. (3)构造CMultiProcess对象theMultiProcess. CMultiProcess the MultiProcess(nProcessCount,lpProcessTable,nStartStatusCount, IpStartStatusTable,nShutStatusCount,IpShutStatusTable); (4)调用theMultiProcess..StartProcess(()启进程. (5)每个进程在初始化完成后,置READY状态事件为有信号, (6)在所有进程中,设计WM STARTUP以及WM SHUTDOWN的消息处理函数,根据 WPARAM参数执行相应的启(停)步,设置状态事件为有信号. (7)调用theMultiProcess..ShutProcess()停进程. 4结束语 ()多线程是实现多任务应用的一种先进、有效的技术.同步线程间对资源的访问是设计 多线程应用的一个共同问题. (2)文中所述的设计方法及CMultiThread与CMultiProcess类概括了一般多任务应用系统 的共性,具有较强的通用性. 参考文献 I Andrews Mark著,Windows NT3.5与Visual C++程序设计.岳晋生译.北京:科学出版社,I995 2 Richter Jeffrey著.Windows95,Windows NT3.5高级编程技术.郑全战,阿夏译.北京:清华大学出版 社,1996 (下接494页)

王 成耀等 , 环境 下 基于 多线程 的 面 向对象应用 系 统设计 》 向各进程 主窗 口 发送 消息 , 参数值 为 构 造 个 手 动复位 事件 , 其 名 为 “ 进程 主 窗 口 名 第 个停 态 名 ” 构 造 与 之 相 关 的 对象 向各 进 程 主窗 口 发送 消息 , 停所有进程 应 用 定义进程 表 定义启状态表 与停状态表 构造 对象 , , , , , 调 用 启进程 每个进程 在初 始化完成后 , 置 状态事件为有信号 在 所 有进 程 中 , 设计 处 以 及 处 的消息处理 函数 , 根 据 参数执行相 应 的启 停 步 , 设置状态事件 为有信号 调 用 停 进程 结束语 多 线程是 实现多 任务应 用 的一种 先进 、 有 效 的技 术 同步 线 程 间对资源 的访 问是 设计 多线程应用 的一个共 同 问题 文 中所述 的设计方法及 与 类 概括 了一般多 任务应用 系 统 的共性 , 具有 较强 的通 用性 参 考 文 献 著 与 程序设计 岳晋生 译 北京 科学 出版社 , 凡 著 , 高级编程技术 郑全 战 , 阿夏译 北京 清华大学 出版 社 , 下 接 页

·494· 北京科技大学学报 1997年第5期 参考文献 I Reed R.Pruning Algorithms -A Survey.IEEE Trans NN,1993,4(5):740~747 2 Mozer M C.Smokensky P.Skeletonization:A Technique For Trimming the fat From a Network via Relevance Assessment.Advances in Neural Information Processing 1989.(1):107~115 3雷鸣,尹申明、杨叔子,神经网络自适应学习研究.系统工程与电子技术,1994(3):19~27 Two Improved Study Algorithms for Neural Network Structure Wang Kecheng Wang Kejun?Yu Datai 1)Information Engineering School,UST Beijing,Beijing 100083,China 2)Department of Automatic Control,Harbin Engineering University,Harbin 150001,China ABSTRACT Based on the two Neural Network Study algorithim:Sensitivity Calculation and Self Constructing,two improved algorithm are proposed,which are proved to be better than the original algorithms by the experiments. KEY WORD neuraln network,structure study algorithm,sensitivity calculation (上接489页) Object-Oriented Application System Design Based on Multithreading under Windows NT Wang Chengvao Li Xiushan Pang Wei Inrormation Engineering School.UST Beijing,Beijing 100083.China ABSTRACT Under Windows NT,an object-oriented table-driven method is proposed, which can be used to implement multithreaded processes and synchronize the startup shutdown of multiple processes.A general implementation framework is described for designing multitasked application.The key advantages of this framework are to utilize system resources and to achieve simultaneous execution of multiple tasks. KEY WORDS multiprocess,multithread,synchronization,Windows NT

, 北 京 科 技 大 学 学 报 年 第 期 参 考 文 献 一 , , 一 , 一 一 雷 鸣 , 尹 申明 , 杨叔 子 神经 网络 自适 应学 习研究 系 统工程 与 电子技术 , 一 环 价 人 ‘ 肋 , 刀 ‘ 块 , , , , , 出 , , , 拓 姗 , , 上接 页 一 瀚 阴邵,口 百 , , , 环全 一 , , 一 一 俪 , , ,

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
已到末页,全文结束
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有