多线程管理与线程通信操作系统课程设计论文

上传人:hs****ma 文档编号:504401973 上传时间:2022-12-18 格式:DOCX 页数:34 大小:1.05MB
返回 下载 相关 举报
多线程管理与线程通信操作系统课程设计论文_第1页
第1页 / 共34页
多线程管理与线程通信操作系统课程设计论文_第2页
第2页 / 共34页
多线程管理与线程通信操作系统课程设计论文_第3页
第3页 / 共34页
多线程管理与线程通信操作系统课程设计论文_第4页
第4页 / 共34页
多线程管理与线程通信操作系统课程设计论文_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《多线程管理与线程通信操作系统课程设计论文》由会员分享,可在线阅读,更多相关《多线程管理与线程通信操作系统课程设计论文(34页珍藏版)》请在金锄头文库上搜索。

1、学号100510119企w*1大学确江噂吃74二。记耳口日口UniMesityJinjirngCHIegg|操作系统课程设计论文题目多线程管理与线程通信学院四川大学锦江学院专业计算机科学与技术学生姓名钟霖导师姓名李炳法内容摘要随着科学技术的发展,通信变得越来越重要,如何实现不同主机之间的通信,成为越来越多人关心的问题。本次课程通过实现两个端口,一个服务端口,通过多线程为客户端提供了一个交流的平台。客户通过客户端建立用户,进行信息交流。1、理解线程要讲解线程,不得不说一下进程,进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它系统资源组成。进程在运行时创建的资源随着进程的

2、终止而死亡。线程的基本思想很简单,它是一个独立的执行流,是进程内部的一个独立的执行单元,相当于一个子程序,它对应于VisualC+中的CwinThread类对象。单独一个执行程序运行时,缺省地包含的一个主线程,主线程以函数地址的形式出现,提供程序的启动点,如main()或WinMain()函数等。当主线程终止时,进程也随之终止。根据实际需要,应用程序可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,使用该进程的全局变量和系统资源。操作系统给每个线程分配不同的CPU寸间片,在某一个时刻,CPU只执行一个时间片内的线程,多个时间片中的相应

3、线程在CPUUJ轮流执行,由于每个时间片时间很短,所以对用户来说,仿佛各个线程在计算机中是并行处理的。操作系统是根据线程的优先级来安排CPU勺时间,优先级高的线程优先运行,优先级低的线程则继续等待。线程被分为两种:用户界面线程和工作线程(又称为后台线程)。用户界面线程通常用来处理用户的输入并响应各种事件和消息,其实,应用程序的主执行线程CWinAPP寸象就是一个用户界面线程,当应用程序启动时自动创建和启动,同样它的终止也意味着该程序的结束,进程终止。工作线程用来执行程序的后台处理任务,比如计算、调度、对串口的读写操作等,它和用户界面线程的区别是它不用从CWinThread类派生来创建,对它来说

4、最重要的是如何实现工作线程任务的运行控制函数。工作线程和用户界面线程启动时要调用同一个函数的不同版本;最后需要读者明白的是,一个进程中的所有线程共享它们父进程的变量,但同时每个线程可以拥有自己的变量。2、线程的管理和操作(一)线程的启动创建一个用户界面线程,首先要从类CwinThread产生一个派生类,同时必须使用DECLARE_DYNCREATEIMPLEMENT_DYNCREAT明和实现这个CwinThread派生类。第二步是根据需要重载该派生类的一些成员函数如:ExitInstance()、InitInstance()、OnIdle()、PreTranslateMessage()等函数。

5、最后调用AfxBeginThread()函数的一个版本:CWinThread*AfxBeginThread(CRuntimeClass*pThreadClass,intnPriority=THREAD_PRIORITY_NORMAL,UINTnStackSize=0,DWORDdwCreateFlags=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL)启动该用户界面线程,其中第一个参数为指向定义的用户界面线程类指针变量,第二个参数为线程的优先级,第三个参数为线程所对应的堆栈大小,第四个参数为线程创建时的附加标志,缺省为正常状态,如为CREATE_SUSP

6、END磔程启动后为挂起状态。对于工作线程来说,启动一个线程,首先需要编写一个希望与应用程序的其余部分并行运行的函数如Fun1(),接着定义一个指向CwinThread对象的指针变量*pThread,调用AfxBeginThread(Fun1,param,priority)函数,返回值赋给pThread变量的同时一并启动该线程来执行上面的Fun1()函数,其中Fun1是线程要运行的函数的名字,也既是上面所说的控制函数的名字,param是准备传送给线程函数Fun1的任意32位值,priority则是定义该线程的优先级别,它是预定义的常数,读者可参考MSDN(二)线程的优先级CwinThread类的

7、成员函数用于线程优先级的操作:intGetThreadPriority();BOOLSetThradPriority()(intnPriority);上述的二个函数分别用来获取和设置线程的优先级,这里的优先级,是相对于该线程所处的优先权层次而言的,处于同一优先权层次的线程,优先级高的线程先运行;处于不同优先权层次上的线程,谁的优先权层次高,谁先运行。至于优先级设置所需的常数,自己参考MSDNR可以了,要注意的是要想设置线程的优先级,这个线程在创建时必须具有THREAD_SET_INFORMATON权限。对于线程的优先权层次的设置,CwinThread类没有提供相应的函数,但是可以通过Win32

8、SDK函数GetPriorityClass()和SetPriorityClass()来实现。(三)线程的悬挂和恢复CWinThread类中包含了应用程序悬挂和恢复它所创建的线程的函数,其中SuspendThread()用来悬挂线程,暂停线程的执行;ResumeThread()用来恢复线程的执行。如果你对一个线程连续若干次执行SuspendThread(),则需要连续执行相应次的ResumeThread()来恢复线程的运行。(四)结束线程终止线程有三种途径,线程可以在自身内部调用AfxEndThread()来终止自身的运行;可以在线程的外部调用BOOLTerminateThread(HANDLE

9、hThread,DWORDdwExitCode来强行终止一个线程的运行,然后调用CloseHandle()函数释放线程所占用的堆栈;第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止关键词:多线程通信服务端口客户端目录1 .课程设计11 1功能主要设计内容112主要设计原理12课程设计需求分析23概要设计23 1整体设计框架24 2各模块的基本算法24.1.1 多线程原理24系统实现35 1原理34.2运行环境Eclipse简介343流程图描述543代码描述104 31服务端代码105 32客户端代码145系统测试176 1系统功能测试176总22参考文献241.课程设计11功能主要

10、设计内容本设计主要采用java语言编写,设计一个模拟的多线程通信,可以实现客户端通过服务端,实现客户端与客户端之间进行通信。主要分为两部分,一部分为SeriverSocket端和ClientSocket端。12主要设计原理线程是进程中能够执行的实体,是进程的组成部分,也是处理器调度和分派的基本单位。允许进程包含多个可并发的线程,这些线程共享进程所获得的主存空间和资源,可以完成某一项任务而协同工作。在java语言中,多线程的机制是通过虚拟CPU来实现的。可以形象的理解为,在一个java程序内部虚拟了多台计算机,每台计算机对应一个线程,有自己的CPU,可以获取所需要的代码和数据,因此能独立执行任务

11、,相互间还可以共用代码和数据。Java的线程是通过java.lang.Thread类来实现的,它内部实现了虚拟CPU的功能,能够接收和处理传递给它的代码数据,并提供了独立的运行控制功能。每个线程都是某个特定Thread对象所又t应的run()方法来完成其操作的,方法run()称为线程体。在计算机网络技术中,两个进程间可以通过一个双向的网络通信连接实现数据交换,这种通信链路的端点被称为“套接字”,套接字在具体实现中又分为服务套接字和客户端套字。客户端有两种,通常用来实现“客户服务器”连接和数据传输。当进程间通过网络进行通信时,java技术仍使用它的流模型。每个Socket对象都封装了相应的一个输

12、入流和一个输出流对象。如果一个进程要通过网络向另一个进程发送数据,只需简单地将数据写到与其Socket相关联的输出流中去,相对应的,一个进程可以从相关联的输入流来读取另一个进程所写出的数据。建立网络连接之后,使用与Socket相关联的I/O流一旦打开,其使用方式和先前其它I/O流的使用方式完全相同。两台计算机之间如果要建立网络连接,一台机器中必须运行一个进程来等待连接,而另一台机器必须试图连接到前一台机器。这和电话系统类似,必须由一方发起呼叫,而此时另一方必须处于等待呼叫状态。所不同的时,Socket通信的两端不是对等的等待连接请求的一端称为服务器,而主动发起连接的一端称为客户机。建立连接时所

13、需的寻址信息包括:远程计算机的机器名或IP地址;试图连接的对方端口号。2课程设计需求分析随着网络的快速发展,人与人之间的交越来越多,如何让双方或者是更多人同时进行通信已经变得越来越重要。在当今信息世界里,聊天工具的使用是非常频繁的,如MSN、QQ、校内通,之类的聊天工具许多人都正在使用。此次课程设计通过多线程通信,主要采用了建立客户端与用户端之间进行通信,虽然其功能简单,但基本实现了多个用户同时进行通信。3概要设计31整体设计框架本程序主要分为两部分,一部分为TestServer端(服务端),主要用于监听通信端口,接收客户端连接请求,每当有新用户上线时会进行如下处理:1打开与该用户相关联的I/

14、O流2接收新用户名3将新用户信息(包括用户名和对应的输出流对象)加入到在线用户列表中去4启动一个新的线程,该线程负责监听并转发此新用户的发言信息另一部分为TestClient端(客户端),主要是用于创建Socket对象,连接服务器的9999端口,建立连接后,通过创建新进程进行多个用户之间的通信。其主要是包括以下几个主要方面:1创建界面2输入用户的名字3建立连接4创建进程,实现进程之间的通信3 2各模块的基本算法3.1.1 多线程原理每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序

15、里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定.线程的运行中需要使用计算机的内存资源和CPU。一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号