- 1、本文档共34页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程实用教程第二版_第7篇 章WinSock的多线程编程.ppt
第7章 WinSock的多线程编程 7.1 WinSock为什么需要多线程编程 7.2 Win32操作系统下的多进程多线程机制 7.3 VC++对多线程网络编程的支持 7.4 多线程FTP客户端实例 * 本章首先说明WinSock需要多线程编程的原因, 然后说明Win32操作系统下的多进程多线程机制、多线程机制在网络编程中的应用和Visual C++6.0对多线程网络编程的支持, 进而分析了MFC支持的两种线程,给出了创建MFC的工作线程、创建并启动用户界面线程和终止线程的步骤。 第7章 WinSock的多线程编程 7.1.1 WinSock的两种I/O模式 如前所述,WinSock在进行输入输出的时候,可以使用两种工作模式。即“阻塞”模式(Blocking Mode)或“非阻塞”模式,又称为同步模式或异步模式。工作在“阻塞”模式的套接字称为阻塞套接字,工作在“非阻塞”模式下的套接字称为非阻塞套接字。 第7章 WinSock为什么需要多线程编程 “阻塞”与“非阻塞”模式各有其优点和缺点。 阻塞套接字的I/O操作工作情况比较确定,无非是调用、等待、返回。大部分情况下,I/O操作都能成功地完成,不过就是花费了等待的时间。因而比较容易使用,容易编程;但在应付诸如需要建立多个套接字连接来为多个客户服务的时候,或在数据的收发量不均匀的时候,或在输入输出的时间不确定的时候,却显得性能低下,甚至无能为力。 7.1.2 两种模式的优缺点及解决方法 使用非阻塞套接字,需要编写更多的代码,因为必须恰当地把握调用I/O函数的时机,尽量减少无功而返的调用,还必须详加分析每个Winsock调用中收到的WSAEWOULDBLOCK错误,采取相应的对策,这种I/O操作的随机性使得非阻塞套接字显得难于操作。 所以,我们必须采取一些适当的对策,克服这两种模式的缺点,让阻塞和非阻塞套接字能够满足各种场合的要求。 对于非阻塞的套接字工作模式,进一步引入了五种“套接字I/O模型”,在第8章详细说明。 对于阻塞的套接字工作模式,则进一步引入了多线程机制。 7.1.2 两种模式的优缺点及解决方法 一个线程也需要占用一定的系统资源, 线程是进程中相对独立的执行单位,也是Win32操作系统中可调度的最小的执行单位。 多个进程中的多个线程并发地执行。 对于拥有多个处理机的计算机系统,调度程序可以将不同的线程安排到不同的处理机上去运行,一方面平衡了CPU的负载,另一方面也提高了系统的运行效率。 当某个线程的代码都执行完毕时,该线程会自动终止;当一个线程终止时,会将它所占用的资源释放给进程。 7.2.2 Win32是支持多线程的操作系统 如果一个应用程序,有多个任务需要同时进行处理,那就最适合使用多线程机制。 对于网络上客户机软件,采用多线程的编程技术,能克服在单线程的编程模式下,由于阻塞等待而产生的客户程序就不能及时响应用户的操作命令的问题。 对于网络上服务器软件,采用多线程的编程技术,能更好地为多个客户服务。 即便是对于一个客户,采用多线程机制也能大大提高应用程序的运行效率。比如大家熟悉的东方快车、网络蚂蚁等文件下载软件,就采用了多线程机制,用多个线程同时下载一个文件的不同部分,大大加快了下载速度。 总之,多线程机制在网络编程中是大有作为的。 7.2.3 多线程机制在网络编程中的应用 Visual C++6.0为程序员提供了Windows应用程序的集成开发环境,在这个环境下,有两种开发程序的方法。既可以直接使用Win32 API来编写C风格的Win32应用程序,也可以利用MFC基础类库编写C++风格的应用程序。 在这两种Windows应用程序的开发方式下,多线程的编程原理是一致的。 7.3 VC++对多线程网络编程的支持 微软的基础类库MFC提供了对于多线程应用程序的支持。在MFC中,线程分为两种, 一种是用户接口线程(user-interface thread),或称用户界面线程; 另一种是工作线程(the worker thread),这两类线程可以满足不同任务的处理需求。 7.3.1 MFC支持的两种线程 1.用户接口线程 用户接口线程通常用来处理用户输入产生的消息和事件,并独立地响应正在应用程序其它部分执行的线程们产生的消息和事件,MFC特别地为用户接口线程提供了一个消息泵(a message pump)。用户接口线程包含一个消息处理的循环,以应对各种事件。 在MFC应用程序中,所有的线程都是由CWinThread对象来表示的。CWinThread类(可以理解为C++的Windows 线程类)是用户接口线程的基类,CWinApp就是从CWinThread类派生出来的,我们在编写用户接口线程的时候,也需要从CWinThread类派生出自己
文档评论(0)