字体
第(2/5)页
关灯
   存书签 书架管理 返回目录
下几个方面的内容:

    ? Windows 下多线程的基本概念;

    ? 用户界面线程和工作者线程;

    ? 线程的管理cāo作;

    ? 线程的同步;

    ? 多线程编程实例。

    9.1 多线程的基本概念

    在Win32 下,一个应用程序由一个或多个进程组成。一个进程由一个或多个线程以及代

    码、数据和其他内存中的程序资源组成。典型的程序资源包括打开的文件、信号量、动态分

    配的内存等。线程在进程空间中执行。

    线程是cāo作系统分配处理器时间的最小单位。每个线程有自己的堆栈,CPU 寄存器,以

    及程序入口。每个线程共享所有处理器的资源。

    进程中的每个线程都独立执行,不会影响该进程中的其他线程。所有线程共享公共的资

    源。因此必须采用信号量或者其他进程间通信方法来调整线程的工作。

    9.2 两种重要的线程

    Windows 提供了两种线程,用户界面线程和工作者线程。用户界面线程通常用来处理消

    息循环、与用户jiāo互,工作者线程用来处理后台的计算。下面分别介绍这两种线程。

    9.2.1 用户界面线程

    每一个Windows 应用程序都有一个主线程。这里的用户界面线程是指用来和用户进行jiāo

    互的线程。接收用户传送的数据,并且做出响应。用户界面线程通常包含自己的窗口,有自

    己的消息循环,独立于应用程序的其他部分。

    创建一个用户界面线程需要首先继承线程类CWinThread,重载它的成员函数,如表9-1

    所示。最后调用AfxBeginThread 创建线程对象。

    枫叶文学网www.fywxw.com

    Visual C++ 6.0 程序设计从入门到精通

    ·208·

    表9-1 需要重载的CWinThread 的成员函数

    函数名称 作用

    InitInstance 线程的初始化,通常需要重载

    ExitInstance 释放线程占用的资源,通常需要重载

    OnIdle 空闲时间的处理,不一定重载

    PreTranslateMessage 过滤消息,不一定重载

    ProcessWndProcException 处理线程抛出的意外

    Run 线程控制函数,通常不重载

    9.2.2 工作者线程

    工作者线程通常用来处理后台运行的任务。在后台任务运行的同时,用户可进行其他cāo

    作,不必等待后台任务的结束。例如一个三维模型编辑软件,用户要对两个模型做布尔运算。

    在进行计算的同时,用户希望可以观察两个模型,对模型进行旋转,缩放的cāo作。再如文本

    浏览软件的打印功能,在打印文本的工程中,用户仍然会继续浏览文本内容。这些都属于工

    作者线程。

    创建一个工作者线程只需要两个步骤。首先实现工作者线程的功能函数,然后启动线程

    即可。可以调用Win32 提供的API 函数CreateThread 创建一个线程,MFC 对Win32 的线程

    cāo作做了封装,也可以通过调用AfxBeginThread 创建一个线程对象。这些函数及其调用方法

   
上一页 目录 下一页