多线程与网络编程初步 .pdf
文本预览下载声明
第 10章 多线程与网络编程初步
教学提示:Windows 是一个支持多任务的操作系统。当在一个程序中需要启动另外一
个程序时,需要用到多进程的编程方式。如果一个进程中有一些相似的任务需要同时推进,
可以为每个任务建立一个线程,从而形成多线程的编程。随着网络技术的广泛应用,网络
编程也越来越受到重视,网络编程主要使用Winsock 技术。
教学目标:掌握进程的创建与终止及相应的管理,了解线程的基本概念,并掌握线程
的创建及使用。能够使用Winsock 进行简单的网络编程。
10.1 Windows 的多任务
Windows 是一个支持多任务的操作系统。现在可以在欣赏电脑播放 CD 音乐的同时,
一边打印文件,一边编辑文件,这在以前的 DOS 操作系统的时候是不可能的。因为 DOS
是一个单用户、单任务的操作系统,一个时间段内只能运行一道程序。而 Windows 环境下
却可以做到这点,这都是得益于 Windows 的多进程处理及多线程处理功能。除了上述所说
的多任务的优点,再来看一下网络应用盛行的当今时代,多任务给我们带来的益处。作为
一个网络服务器,比如搜狐网站,每个时刻都要接收来自客户端的数量巨大的网络服务请
求,如果没有多任务环境的支持,而是处理完一个请求后再处理下一个,这样大家在上网
时就得在自己的机器前坐等其他的请求处理完后再得到响应。但实际情况却非如此,我们
可以随时上网,感觉不到其他人的存在,这就是操作系统的多任务也就是多进程、多线程
机制所带来的优越性。
在 VC 中如何设计一个多任务程序,甚至如何使用这种技术来实现网络应用,这都是
作为程序员首先要关心和掌握的问题。通过本章的学习,相信读者会达到这个目标。
10.2 Windows 的多进程程序设计
进程是由代码,数据和该进程中线程可用的其他系统资源,诸如文件、管道和同步对
象组成。每个进程都有一个私有的虚拟地址空间。一个进程至少包括一个线程(称为主线
程) ,并且每个进程都由主线程开始。在运行过程中可以建立新的执行线程。
例如,如果启动了 Microsoft Word 程序,则在内存中就存在了一个以 winword.exe 为
代码的进程,如果不关闭当前的 Word 程序,又通过开始菜单启动了 Microsoft Word ,则又
开始了一个以 winword.exe 为代码的进程。这两个进程的代码虽然一样,但所处的环境也
就是数据或其他系统资源是不同的,它们是两个不同的进程。如果再启动一个记事本程序,
则系统中又多了一个以 notepad.exe 为代码的进程,现在系统中已经存在了 3 个用户进程。
第 10章 多线程与网络编程初步 ·263 ·
它们在同一段时间内都是向前推进的。
本节主要介绍如何在 VC 中进行多进程的程序设计,主要介绍如何创建新进程、终止
已有进程并设置进程的优先级。
10.2.1 创建新进程
Windows 是以对象的方式来管理进程的,它由 Win32 子系统来创建和维护,并且可以
由此进程的句柄来进行管理。进程的创建一般是在一个进程的线程中调用函数
CreateProcess( )来创建的,这个进程可以和原进程共享资源(例如句柄和变量) ,而且在
Windows 中,这两个进程不存在的父子关系,即使原进程终止后,这个新进程仍然可以继
续执行。
在介绍创建函数之前,先来看几个相关的数据结构。
1. 数据结构
(1) SECURITY_ATTRIBUTES 结构
该结构存放一个对象的安全描述符并指定是否继承返回的句柄。SECURITY_
ATTRIBUTES 结构定义如下。
typedef struct_SECURITY_ATTRIBUTES{
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
}SECURITY_ATTRIBUTES
其中成员含义如下。
① nLength :指定该结构大小。
显示全部