Windows多线程技术

Windows多线程技术

ID:40226641

大小:73.00 KB

页数:25页

时间:2019-07-27

Windows多线程技术_第1页
Windows多线程技术_第2页
Windows多线程技术_第3页
Windows多线程技术_第4页
Windows多线程技术_第5页
资源描述:

《Windows多线程技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Windows多线程技术哈尔滨工程大学程序和进程程序计算机指令的集合,它以文件的形式存储在磁盘上进程通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动区别:进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位, 因此,他不占用系统的运行资源。进程由两个部分组成:1、操作系统用来管理进程的内核对象。内核对象是操作系统内部分配的一个内存块,内核对象也是系统用来存放关于进程的统计信息的地方。(PCB)程序和进程2

2、、地址空间。它包含所有可执行模块或DLL模块的代码和数据。他还包含动态内存分配的空间。如线程堆栈和堆分配空间。内核对象:是操作系统内部分配的一个内存块,它是一种只能被内核访问的数据结构, 其成员负责维护该对象的各种信息,应用程序无法找到并直接改变它们的内容,只能通过Windows提供的函数对内核对象进行操作。进程进程进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。单个进程可能包含若干个线程,这些线程都“同

3、时”执行进程地址空间中的代码。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程的一个线程,称为主线程。此后,该线程可以创建其他的线程。线程线程有两个部分组成:1。线程的内核对象,操作系统用它来对线程实施管理,内核对象也是系统用来存放线程统计信息的地方。TCB2。线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。当创建线程时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计

4、信息组成的一个小型数据结构。线程和进程线程总是在某个进程环境中创建。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存。线程运行对于单个CPU操作系统为每一个运行线程安排一定的CPU时间——时间片。系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,因时间片相当短,因此,给用户的感觉,就好像线程是同时进行的一样。如果计算机拥有多个CPU,线程就能真正意义上运行了。进程与线程现代操作系统都是多任务抢占式的操

5、作系统,是指将CPU时间片分配最需要它的应用程序,即便一个应用程序永远不打算放弃CPU,操作系统也能保证随时"抢占"CPU时间,然后对当前所有的任务进行合理的调度。要实现多任务,系统有一个核心调度程序,负责为每一个任务分配CPU时间,允许其执行指定的一段时间,当这段时间用完后,控制权会重新交回到操作系统,操作系统可在此时重新分配CPU时间。何时使用多线程线程有什么用?MSDN给出的答案是"等"。在需要等待的地方,多线程确实能够发挥很高的效能。举一个例子:一个网络程序向远程主机发送了一个请求,正在等待回应,而在此期间,它

6、还希望能够与用户进行交互。一种实现方法是:程序继续与用户交互,在交互的间歇检查一下回应是否到达。而更好的方法是建立一个新的线程(称为工作线程)来等待回应,原始线程继续照常与用户交互。后一种方法比前一种方法好在后者执行的指令更少,因而效率更高。如果您对Windows编程熟悉:在实现前者时,必须保证能够及时检测到回应到达,因而就不能使用GetMessage()而要使用PeekMessage()。如果使用GetMessage(),而恰巧在很长的一段时间内都没有消息到达,原始线程就不会从GetMessage()返回,也就不能检

7、测回应是否到达。使用PeekMessage(),可以令其在没有消息时也立即返回,因而可以检测回应是否到达。网络部分的情况也一样--程序不能等回应一直等下去否则就无法与用户交互。无论如何,在即没有消息、也没有回应到达的情况下,原始线程没有有效的进入等待状态,而是不停地"空转",检测二者中是否有到达的,这对系统资源显然是极大的浪费。线程间的通讯但是,新的问题又出现了,工作线程发现回应已经到达了,它可能要通知原始线程才行--它与原始线程是并发执行的。这就涉及到线程间通信了,有一种最简单的方法:Windows消息。工作线程通过

8、向原始线程的窗口发送一个消息,然后终止;当原始线程的消息循环发现这个消息时,就知道回应已经到达了。线程间通信的方法还有很多,将在以后专门介绍。最后要说明的是--很重要的一点:多线程经常不是程序员主动来使用的,而是在依赖操作系统时,已然是多线程了。即使用,也很有节制,滥用线程将适得其反。究竟什么地方应该使用多线程,并没有什么规则,将

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。