11程序设计实践6w线程、模块化、时间函数和设计问题.pptx

11程序设计实践6w线程、模块化、时间函数和设计问题.pptx

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模块化设计问题提纲1. 使用线程实现任务并发2. 模块化和工程3. 概要设计要点4. 时间控制函数5. 有限状态自动机解题1.使用线程实现任务并发问题的引出:以电梯控制系统为例目前能想到的程序主体结构 main(){ while (1){ state_trans(); //计算此刻电梯的状态 print_message(); //输出电梯此刻的状态,包括动画 get_input(); //接收当前时刻的新输入(包括新目 标和新呼叫) control(); /*根据控制策略确定下一目标楼层, 在state_trans()中要用到 */ time_count(); //时间片推进一个 }}思考:上述结构不合理之处? 1.使用线程实现任务并发上述结构不合理之处:计算和输出电梯状态与接收服务请求是串行的,与现实中的电梯运行不符!程序结构的改进: 从上述代码中删除get_input(),从而实现每隔一小段时间就刷新电梯当前状态 main(){ while (1){ state_trans(); //计算此刻电梯的状态 print_message(); //输出电梯此刻的状态 control(); /*根据控制策略确定下一目标楼层,这 在state_trans()中要用到 */ time_count(); //时间片推进一个 }}1.使用线程实现任务并发但是,程序必须要能接收电梯服务请求,如何处理服务请求的输入?理想状态:电梯服务请求的接收和电梯状态的计算输出能同时进行,互不影响但是,能否实现?答案是:使用线程电梯状态计算和输出接收服务请求共享内存区1.使用线程实现任务并发进程一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动,例如用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程进程是资源申请、调度和独立运行的单位1.使用线程实现任务并发线程线程是系统分配处理器时间资源的基本单元。对于操作系统而言,其调度单元是线程(为线程提供时间片,线程在自己的时间片内运行)。一个程序中多段代码同时并发执行,称为多线程譬如用word同时打开多个文档进行编辑,用IE浏览器同时访问多个网站通过多线程,一个进程表面上看同时可以执行一个以上的任务——并发线程(续)一个进程至少包括一个线程(称为主线程)。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。线程自己不拥有系统资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源1.使用线程实现任务并发在C程序中要创建线程,可以调用Windows操作系统提供的创建线程的函数CreateThread :HANDLE ? CreateThread( ? ? LPSECURITY_ATTRIBUTES ? lpThreadAttributes, ? ? ? DWORD ? dwStackSize, ? ? ? LPTHREAD_START_ROUTINE ? lpStartAddress, ? ? ? LPVOID ? lpParameter, ? ? ? DWORD ? dwCreationFlags, ? ? ? LPDWORD ? lpThreadId); ? ? LPVOID是一个Void类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量。DWORD是32位无符号整数。1.使用线程实现任务并发lpThreadAttributes表示创建线程的安全属性,NT下有用。可赋值为NULL。dwStackSize指定线程栈的尺寸,如果为0则与进程主线程栈相同。lpStartAddress指定线程开始运行的地址。赋值为指向函数的指针,即函数名。该函数的名称任意,但函数类型必须遵照下述声明形式: DWORD WINAPI ThreadProc(LPVOID lpParameter);否则需要进行强制类型转换lpParameter表示传递给线程的32位的参数(数值或指针)。 若无参数则赋值为NULL。dwCreationFlags表示是否创建后挂起线程(取值CREATE_SUSPENDED表示挂起,取值0表示创建后立即运行),挂起后调用ResumeThread继续执行。若不挂起则赋值为0。lpThreadId用来存放返回的线程ID。 DWORD ThreadID1 = 1; HANDLE hRead1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput, NULL,0,ThreadID1);DWORD WINAPI Fun1Proc(LPVOID lpParamet

文档评论(0)

文单招、专升本试卷定制 + 关注
官方认证
服务提供商

专注于研究生产单招、专升本试卷,可定制

版权声明书
用户编号:8005017062000015
认证主体莲池区远卓互联网技术工作室
IP属地河北
统一社会信用代码/组织机构代码
92130606MA0G1JGM00

1亿VIP精品文档

相关文档