文档详情

面向对象程序设计(C#)电子教案李法平 第8章.ppt

发布:2017-08-16约4.43千字共21页下载文档
文本预览下载声明
第8章 多线程编程 */12 目 录 任务8.1 创建多线程程序 任务8.2 创建多线程同步程序 */12 任务8.1 创建多线程程序 2 1 知识目标 能力目标 线程类 掌握多线程程序建立 */12 8.1.1情境描述 为了提高广大顾客的积极性,运动商场时常进行游戏促销活动,猜字游戏就是其中一种。该游戏的规则是通过将单词中的某些字符去掉,给出单词的汉语意思,用户通过键盘输入当前单词,如果输入单词正确,则猜下一个单词,否则提示猜字失败,继续猜字。在猜字的过程中,需要间隔1秒钟提示用户用时,用户猜字总时间为300秒,超过300秒系统将自动关闭游戏。为了实现游戏操作动态时间显示及超过300秒自动关闭游戏,需要完成以下任务: 1)识别显示游戏时间机制及控制机制 2)创建控制时间子线程 第1章目录 猜字游戏的猜字过程及猜字时间显示2个功能,从执行的过程来看,他们之间不存在顺序关系,执行过程基本是同时进行,这就使得当前的程序从只有1条主要的程序流程变成了2条程序流程。 多线程技术是在同一个程序中,开启不同的运行子线程,子线程之间的运行时异步进行的。采取定义子线程技术,能够有效的控制猜字游戏过程的时间显示。 第1章目录 8.1.2问题分析 1)利用Visual studio 2010打开任务8.1案例素材。 注:UI目录下的GassWordMenu实现猜字游戏菜单,BLL目录下的GassWordBLL实现猜字游戏主要逻辑。 2)打开BLL目录下的创建时间控显示类,用于控制猜字的停止及时间显示。名称GassControl。 3) 在新建的类中加入System.Threading的名称空间,用于引入线程类。 4)在GassControl类中添加成员变量,分别显示时间的线程tControlSeconds和用于显示游戏计时变量 5)添加时间显示处理方法,StartControl用于执行子线程委托方法,DisplayTimes执行在指定位置显示时间计数。 6)定义构造函数,启动游戏计数线程 第1章目录 8.1.3解决方案 7)、添加线程中断方法 8)、在GassWordMenu类开始游戏的位置增加时间显示控制,代码如下: 9) 运行程序,界面如下: 第1章目录 8.1.3解决方案 8.1.4知识总结 1、进程和线程的定义 线程是进程中执行运算的最小单位,也是操作系统分配处理器时间的基本单位。如果把进程在逻辑上理解为操作系统所完成的任务,那么线程表示完成该任务的很多可能的子任务之一。 每个进程至少有一个执行顺序或线程,创建一个进程包括在指令中的某一点启动进程。这个最初的线程称为基本线程或主线程.线程的实际执行顺序是由应用程序中的方法代码来决定的。进程不执行任何程序,它是线程的容器,同一进程的所有线程共享该进程的所有资源,线程总是在某个进程的环境中创建,而且它的整个生命期都在该进程中。进程执行任务的时候需要处理器。 第1章目录 */12 8.1.4知识总结 2、线程 C#中线程的有关内容是通过System.Threading命名空间实现的。这个命名空间包含了各种线程操作管理组件和接口,其中最为重要的是Thread类,它提供了创建多线程,设置线程优先级并获取线程运行状态等。 线程启动后执行一个任务,这个任务是通过方法来实现的,所以线程必定跟一个执行方法相关联.应用程序的主线程总是从Main方法开始,而后其他的线程需要在程序里自己定义和启动,所以在创建一个线程的实例的时候需要在Thread的构造方法里面传入一个委托实例,这个委托在线程命名空间中的名字叫做ThreadStart,所以在创建线程之前,必须先创建一个ThreadStart的委托实例,创建方法如下: ThreadStart ts=new ThreadStart(方法名); 第1章目录 */12 8.1.4知识总结 3、线程的生命周期 当创建一个线程的对象的时候,线程会经历几个状态,这些状态分别是未启动状态,运行态,未运行态,死亡状态。由Thread类的一些方法将线程从一个状态转换为另一种状态。 使用Thread的ThreadState属性来获取线程的当前状态。ThreadState属性的取值是由ThreadState枚举中定义的,ThreadState枚举的成员如下。 ThreadState.Unstarted:线程被创建后还没有调用Start()方法 ThreadState.Running:调用了Start()方法后线程已启动 ThreadState.Aborted:线程被终止,处于停止状态 ThreadState.AbortRequested::调用了Abort()方法后还没有停止,但是不久后就会停止 ThreadState.Background:线程在后台运行 Thread
显示全部
相似文档