多线程和DLL技术

多线程和DLL技术

ID:39319761

大小:248.31 KB

页数:22页

时间:2019-06-30

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

《多线程和DLL技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第19章多线程和DLL技术Windows中有两个重要的编程手段,多线程技术和DLL技术。多线程是将程序执行分布到多个线程同时执行,这样可以加快程序的运行效率,并能提高程序的并发性。DLL可以将实现不同功能的各个模块组织为不同的DLL,实现功能模块化,提高程序的耦合性。本章将介绍多线程程序的开发、多线程的同步处理以及DLL的开发方法。19.1多线程程序开发Window是支持多线程的操作系统。因此,VC6.0中提供了对多线程程序开发的支持,包括Win32多线程程序开发和MFC多线程程序开发。根据多线程程序的处理类型

2、不同,线程分为工作者线程和界面线程。本节将介绍多线程工作机制、两种创建多线程程序的方法以及工作者线程和界面线程的创建方法。19.1.1多线程工作机制线程是程序的基本运行组成部分,是Win32调度机制中最小的执行单位。线程使用线程上下文记录线程的执行状态,包括堆栈、CPU寄存器状态和在系统调度执行列表中的入口。一个进程由多个线程、代码执行段、数据和其他相关资源组成。进程中的线程共享进程的所有资源。19.1.2Win32多线程程序开发VC6.0提供了创建多线程应用程序的支持,包括使用Win32API开发多线程程序和

3、使用MFC类库开发多线程程序。使用Win32API开发多线程程序只需要将线程的启动地址传入线程的启动函数中,即可启动线程。Win32API中提供了下列函数实现多线程程序的编写。19.1.3MFC多线程程序开发除了提供对Win32多线程程序开发的支持外,VC6.0还提供了对MFC对线程程序的开发。MFC中的CWinThread类实现了对MFC多线程的支持。通常情况下,不需要直接创建CWinThread对象,而是通过调用AfxBeginThread()函数创建CWinThread对象。19.1.4工作者线程和界面线

4、程MFC多线程程序中的线程分为工作者线程和界面线程两种线程。工作者线程通用用来完成后台处理任务。例如,将文档内容输出到打印机、计算年销售总额等任务可以设计为工作者线程。用户界面线程通常用来处理用户输入,响应用户发送的事件和消息。Win32多线程程序是不区分这两种线程的,只需要知道线程的启动地址就可以启动线程。19.2多线程同步处理多线程虽然可以实现任务的同步执行,但是因为不同线程可能访问相同的资源,而访问资源的各个线程是“同时”进行的。因此,多线程编程最重要的方面就是多线程的同步处理。本节介绍完成多线程同步处理

5、的等待函数、同步对象以及如何实现进程间同步,并讲解支持多线程同步的互斥对象、信号量对象、事件对象和关键段对象的使用。19.2.1等待函数在单线程程序中,因为不存在同时访问同一对象的问题,因此不需要处理线程同步。而在多线程程序中,因为各个线程间会发生同时访问同一资源的情况,因此需要处理同步问题。对于资源的读取,可以不进行同步处理,但是只要涉及到资源的写操作,则必须进行同步处理。19.2.2同步对象使用等待函数可以等待资源空闲时,再在线程中操作指定资源。而资源是否空闲一般是通过同步对象来控制的。同步对象用来记录关键

6、资源的状态,每次等待函数返回前会修改关键资源的状态,将其标记为已使用,直到调用同步对象的释放函数,才会将关键资源的状态置为空闲。19.2.3使用Mutex互斥对象互斥对象用来表示线程对指定资源访问的锁定。当一个线程使用互斥对象对指定资源进行访问时,其他线程就不可以访问这个资源。只有当线程释放对互斥对象的访问时,其他线程才可以访问此资源。调用等待函数的线程执行的条件是:它需要等待使用此互斥对象的线程释放对互斥对象的占有权。19.2.4使用Semaphore信号量对象信号量同步对象允许线程同时访问一个或多个进程资源

7、。使用信号量对象可以指定同时访问资源的线程的最大个数和初始化时可以访问资源的线程数。信号量同步对象一般用于只能由有限数目的用户访问的资源的共享控制。但是无论什么资源,对于资源写操作,信号量的计数不能超过1。19.2.5使用Event事件对象事件对象用来表示对象是否有信号。如果有信号,表示当前对象是空闲的,没有被其他线程操作,如果有线程对资源进行操作时,则对应的事件对象处于无信号状态,则所有调用等待函数的线程会等待此事件对象处于有信号状态时,才会继续执行。19.2.6使用Critical关键段对象临界区又称为关键

8、段,是允许一个线程在同一时间访问一个资源或关键源代码的同步对象。临界区一般用于在同一时间只允许一个线程对其访问的情况。例如,修改账户余额,就只能在同一时间只允许一个线程处理。临界区的是为保护关键资源的访问。使用临界区前,首先需要调用InitializeCriticalSection()函数初始化临界区对象。19.3DLL的种类及创建动态链接库(即DLL,Dynamic-linklibr

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

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

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