- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
网络编程实用教程第7章WinSock的多线程编程
壹WinSock需要多线程编程的原因:贰Win32操作系统下的多进程多线程机制、多线程机制在网络编程中的应用和VisualC++6.0对多线程网络编程的支持。叁分析了MFC支持的两种线程,给出了创建MFC的工作线程、创建并启动用户界面线程和终止线程的步骤。本章内容:
7.1WinSock为什么需要多线程编程
7.1.1WinSock的两种输入输出模式如前所述,WinSock在进行输入输出的时候,可以使用两种工作模式:“阻塞”模式:又称为同步模式“非阻塞”模式:又称为异步模式01工作在“阻塞”模式下的套接字被称为阻塞套接字,而工作在“非阻塞”模式下的套接字称为非阻塞套接字。02
“阻塞”与“非阻塞”模式的优点和缺点:阻塞套接字的I/O操作工作情况比较确定,即调用、等待、返回。大部分情况下,I/O操作都能成功地完成,只是花费了等待的时间,容易编程;需要建立多个套接字连接来为多个客户服务的时候,或在数据的收发量不均匀的时候,或在输入输出的时间不确定的时候,阻塞套接字的性能低下,甚至无能为力。
使用非阻塞套接字,需要编写更多的代码,因为必须恰当地把握调用I/O函数的时机,尽量减少无功而返的调用,还必须详加分析每个Winsock调用中收到的错误,采取相应的对策,这种I/O操作的随机性使得非阻塞套接字显得难于操作。所以必须采取适当的对策,让阻塞和非阻塞套接字能够满足各种场合的要求。对于非阻塞工作模式:引入了五种“套接字I/O模型”。阻塞的工作模式,则引入了多线程机制。
7.2Win32操作系统下的多进程多线程机制
应用程序、进程及线程的关系DOS是单用户单任务的。Win32操作系统是多任务的,并且支持一个进程中有多个线程。一个线程(thread)是进程内的一条执行路径,是一个应用程序中的一条可执行路径。一个进程中至少要有一个线程,称为主线程。当启动了一个应用程序时,操作系统将为它创建了一个进程,同时创建该进程的主线程,并开始执行主线程。主线程可以创建并启动其他辅助线程,由主线程创建的线程又可以创建并启动更多的线程。
单CPU分时地运行进程中的各个线程
如果一个应用程序,有多个任务需要同时进行处理,则适合使用多线程机制。对于网络上客户机软件:采用多线程,能克服在单线程的编程模式下,由于阻塞等待而产生的客户程序就不能及时响应用户的操作命令的问题。对于网络上服务器软件:采用多线程的编程技术,能更好地为多个客户服务。对于一个客户:采用多线程机制也能大大提高应用程序的运行效率。网络在线实时监控软件:
VC6.0环境下,两种开发程序的方法:直接使用Win32API来编写Win32应用程序利用MFC基础类库编写C++风格的应用程序。在这两种Windows应用程序的开发方式下,多线程的编程原理是一致的。
微软的基础类库MFC提供了对于多线程应用程序的支持。在MFC中,线程分为两种:用户接口线程:(user-interfacethread),或称用户界面线程;工作线程:(theworkerthread),这两类线程可以满足不同任务的处理需求。
作用:用于处理用户的输入,响应用户产生的消息。MFC为用户接口线程提供了一个消息泵。同时包含一个消息循环,以应对各种事件。MFC应用程序的CWinApp类对象是一个典型的用户接口线程在MFC应用程序中,CWinThread是用户接口线程的基类,CWinApp就是从CWinThread类派生出来的,编写用户接口线程候,也需要从CWinThread类派生。1、用户接口线程
No.1工作线程(workerthread),适用于处理那些不要求用户输入并且比较消耗时间的其他任务。对用户来说,工作线程运行在后台。这就使得工作线程特别适合去等待一个事件的发生。No.2CWinThread类同样是工作线程的基类。在编写工作线程的时候,可以调用MFC的AfxBeginThread函数,来创建CWinThread对象。2.工作线程
利用MFC创建工作线程的步骤:编程实现控制函数创建并启动工作线程一般不必从CWinThread派生一个类。如果需要一个特定版本的CWinThread类,也可以去派生;但对于大多数的工作线程是不要求的。可以不作任何修改地使用CWinThread类。
编程实现控制函数一个工作线程对应一个控制函数。线程执行的任务都应编写在控制函数之中,规定了该线程的执行代码,当控制函数执行结束而退出时,线程也就随之终止。编写工作线程的控制函数必须遵守一定的格式,控制函数的原型声明是:UINTControlFunctionName(LPVOIDpParam);pParam是一个数据结构
文档评论(0)