网络编程实用教程第二版-第7章WinSock的多线程编程课件.ppt
《网络编程实用教程第二版-第7章WinSock的多线程编程课件.ppt》由会员分享,可在线阅读,更多相关《网络编程实用教程第二版-第7章WinSock的多线程编程课件.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章WinSock的多线程编程的多线程编程7.1WinSock为什么需要多线程编程为什么需要多线程编程7.2Win32操作系统下的多进程多线程机制操作系统下的多进程多线程机制7.3VC+对多线程网络编程的支持对多线程网络编程的支持7.4多线程多线程FTP客户端实例客户端实例1u本章首先说明本章首先说明WinSock需要多线程编程的原因,需要多线程编程的原因,u然后说明然后说明Win32操作系统下的多进程多线程机制、操作系统下的多进程多线程机制、多线程机制在网络编程中的应用和多线程机制在网络编程中的应用和VisualC+6.0对对多线程网络编程的支持,多线程网络编程的支持,u进而分析了进而
2、分析了MFC支持的两种线程,给出了创建支持的两种线程,给出了创建MFC的工作线程、创建并启动用户界面线程和终的工作线程、创建并启动用户界面线程和终止线程的步骤。止线程的步骤。第第7章章WinSock的多线程编程的多线程编程7.1.1WinSock的两种的两种I/O模式模式如前所述,如前所述,WinSock在进行输入输出的时候,可以使用两在进行输入输出的时候,可以使用两种工作模式。即种工作模式。即“阻塞阻塞”模式(模式(BlockingMode)或)或“非阻非阻塞塞”模式,又称为同步模式或异步模式。工作在模式,又称为同步模式或异步模式。工作在“阻塞阻塞”模模式的套接字称为阻塞套接字,工作在式的套
3、接字称为阻塞套接字,工作在“非阻塞非阻塞”模式下的套模式下的套接字称为非阻塞套接字。接字称为非阻塞套接字。第第7章章WinSock为什么需要多线程编程为什么需要多线程编程“阻塞阻塞”与与“非阻塞非阻塞”模式各有其优点和缺点。模式各有其优点和缺点。阻塞套接字阻塞套接字的的I/O操作工作情况比较确定,无非是调用、等操作工作情况比较确定,无非是调用、等待、返回。大部分情况下,待、返回。大部分情况下,I/O操作都能成功地完成,不过就操作都能成功地完成,不过就是花费了等待的时间。因而比较容易使用,容易编程;但在应是花费了等待的时间。因而比较容易使用,容易编程;但在应付诸如需要建立多个套接字连接来为多个客
4、户服务的时候,或付诸如需要建立多个套接字连接来为多个客户服务的时候,或在数据的收发量不均匀的时候,或在输入输出的时间不确定的在数据的收发量不均匀的时候,或在输入输出的时间不确定的时候,却显得性能低下,甚至无能为力。时候,却显得性能低下,甚至无能为力。7.1.2两种模式的优缺点及解决方法两种模式的优缺点及解决方法7.2.1Win32OS是单用户多任务的操作系统是单用户多任务的操作系统最早的最早的DOS是单用户单任务的。是单用户单任务的。后来发展到图形界面的后来发展到图形界面的Windows,发展到,发展到Windows95,Windows98,就都支持多任务了,从,就都支持多任务了,从Windo
5、wsNT起,起,Windows操作系统更是发展成了一个真正的抢占式多任务操操作系统更是发展成了一个真正的抢占式多任务操作系统。作系统。7.2Win32操作系统下的多进程多线程机制操作系统下的多进程多线程机制Win32操作系统还支持同一进程的多线程。在一个操作系统还支持同一进程的多线程。在一个Windows进程内,可以包含多个线程。一个线程进程内,可以包含多个线程。一个线程(thread)是进是进程内的一条执行路径,具体地说,是一个应用程序中的一条程内的一条执行路径,具体地说,是一个应用程序中的一条可执行路径,往往是应用程序中的一个或多个函数。可执行路径,往往是应用程序中的一个或多个函数。一个进
6、程中至少要有一个线程,习惯将它称为主线程。任一个进程中至少要有一个线程,习惯将它称为主线程。任何一个应用程序进程都有一个主线程。一般何一个应用程序进程都有一个主线程。一般C程序中的程序中的Main或或WinMain函数就规定了主线程的执行代码。当你启动了一函数就规定了主线程的执行代码。当你启动了一个应用程序时,操作系统在为它创建了进程之后,也创建了个应用程序时,操作系统在为它创建了进程之后,也创建了该进程的主线程,并根据该进程的主线程,并根据Main或或WinMain函数的地址,开始函数的地址,开始执行该进程的主线程。执行该进程的主线程。主线程可以创建并启动其他辅助线程,由主线程创建的线主线程
7、可以创建并启动其他辅助线程,由主线程创建的线程又可以创建并启动更多的线程。程又可以创建并启动更多的线程。7.2.2Win32是支持多线程的操作系统是支持多线程的操作系统u一个线程也需要占用一定的系统资源,一个线程也需要占用一定的系统资源,u线程是进程中相对独立的执行单位,也是线程是进程中相对独立的执行单位,也是Win32操作系统操作系统中可调度的最小的执行单位。中可调度的最小的执行单位。u多个进程中的多个线程并发地执行。多个进程中的多个线程并发地执行。u对于拥有多个处理机的计算机系统,调度程序可以将不同对于拥有多个处理机的计算机系统,调度程序可以将不同的线程安排到不同的处理机上去运行,一方面平
8、衡了的线程安排到不同的处理机上去运行,一方面平衡了CPU的负载,另一方面也提高了系统的运行效率。的负载,另一方面也提高了系统的运行效率。u当某个线程的代码都执行完毕时,该线程会自动终止;当当某个线程的代码都执行完毕时,该线程会自动终止;当一个线程终止时,会将它所占用的资源释放给进程。一个线程终止时,会将它所占用的资源释放给进程。7.2.2Win32是支持多线程的操作系统是支持多线程的操作系统VisualC+6.0为程序员提供了为程序员提供了Windows应用程序的集成开应用程序的集成开发环境,在这个环境下,有两种开发程序的方法。既可以直发环境,在这个环境下,有两种开发程序的方法。既可以直接使用
9、接使用Win32API来编写来编写C风格的风格的Win32应用程序,也可以利应用程序,也可以利用用MFC基础类库编写基础类库编写C+风格的应用程序。风格的应用程序。在这两种在这两种Windows应用程序的开发方式下,多线程的编程应用程序的开发方式下,多线程的编程原理是一致的。原理是一致的。7.3VC+对多线程网络编程的支持对多线程网络编程的支持微软的基础类库微软的基础类库MFC提供了对于多线程应用程序的支持。提供了对于多线程应用程序的支持。在在MFC中,线程分为两种,中,线程分为两种,一种是用户接口线程一种是用户接口线程(user-interfacethread),或称用户界,或称用户界面线程
10、;面线程;另一种是工作线程另一种是工作线程(theworkerthread),这两类线程可以,这两类线程可以满足不同任务的处理需求。满足不同任务的处理需求。7.3.1MFC支持的两种线程支持的两种线程2工作线程工作线程工作线程(工作线程(theworkerthread),适用于处理那些不要求),适用于处理那些不要求用户输入并且比较消耗时间的其他任务。对用户来说,工作用户输入并且比较消耗时间的其他任务。对用户来说,工作线程运行在后台。这就使得工作线程特别适合去等待一个事线程运行在后台。这就使得工作线程特别适合去等待一个事件的发生。件的发生。CWinThread类同样是工作线程的基类,同样是由类同
11、样是工作线程的基类,同样是由CWinThread对象来表示的。但在编写工作线程的时候,你对象来表示的。但在编写工作线程的时候,你甚至不必刻意地从甚至不必刻意地从CWinThread类派生出自己的线程类对象。类派生出自己的线程类对象。你可以调用你可以调用MFC框架的框架的AfxBeginThread帮助函数,它会为帮助函数,它会为你创建你创建CWinThread对象。对象。7.3.1MFC支持的两种线程支持的两种线程1编程实现控制函数编程实现控制函数(implementingthecontrollingfunction)一个工作线程对应一个控制函数一个工作线程对应一个控制函数(thecontro
12、llingfunction)。线程执行的任务都应编写在控制函数之中。控制函数规定了该线程执行的任务都应编写在控制函数之中。控制函数规定了该线程的执行代码,所谓启动线程,实际就是开始运行它对应的线程的执行代码,所谓启动线程,实际就是开始运行它对应的控制函数,当控制函数执行结束而退出时,线程也就随之终止。控制函数,当控制函数执行结束而退出时,线程也就随之终止。编写实现工作线程的控制函数是创建工作线程的第一步。编写实现工作线程的控制函数是创建工作线程的第一步。编写工作线程的控制函数必须遵守一定的格式,控制函数编写工作线程的控制函数必须遵守一定的格式,控制函数的原型声明是:的原型声明是:UINTCon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 实用教程 第二 WinSock 多线程 课件
限制150内