下载
第11章 编写多线程应用程序
本章内容:
• 对线程的解释
• TThread对象
• 管理多线程
• 一个多线程的示范程序
• 多线程与数据库
• 多线程与图形处理
Wi n 3 2操作系统提供了在应用程序中执行多线程的能力。从 1 6位的Wi n d o w s 升级到Wi n 3 2的一个最
大受益便是:它允许多线程同时运行。这也是要升级到 3 2 位D e l p h i 的一个最主要的原因。本章提供了
程序中如何进行多线程编程的所有细节。
11.1 对线程的解释
如同在第3章“Win32 API”中所讨论过的,线程是一种操作系统对象,它表示在进程中代码的一
条执行路径。在每一个 Wi n 3 2 的应用程序中都至少有一个线程,它通常被称为主线程或默认线程。在
应用程序中也可以自由地创建别的线程去执行其他任务。
线程技术使不同的代码可以同时运行。当然,只有在多 C P U 的计算机上,多个线程才能够真正地
同时运行。然而,由于操作系统把 C P U的时间分成很短的片段分配给每个线程,这样给人的感觉好像
是多个线程真的同时运行。
提示 线程不能也从来没有被16位的Windows支持。这就意味着, 任何32 位版本 的Delphi的
多线程程序代码都有无法在Delphi 1环境下编译。如果你在为这两个平台开发程序,请一定记
住这一点。
11.1.1 一种新型的多任务
线程的概念与1 6 位环境中的多任务有很大的不同。或许曾听人们这样讲: Wi n 3 2 是一种抢占式操
作系统,而Windows 3.1是一种协作式的多任务环境。
其关键区别在于:在抢占式多任务环境中,操作系统负责管理哪个线程在什么时候执行。如果当
线程1暂停执行时,线程 2才有机会获得C P U 时间,我们说线程 1是抢占的。如果某个线程的代码陷入
死循环,这并不可怕,操作系统仍会安排时间给其他线程。
在Windows 3.1下,程序员必须保证应用程序能够把控制权返还给 Wi n d o w s。如果这一步失败,将
导致整个操作环境锁死,或许你已经有过这样的痛苦经历。只要稍微想想便会明白, 1 6 位的Wi n d o w s
是如此脆弱,它依赖于应用程序的运行情况,并且不允许程序陷入死循环或无穷递归以及任何封闭状
态。这是因为所有的应用程序都必须协助Wi n d o w s 工作,这种工作类型被称为协作式多任务系统。
11.1.2 在Delphi程序中使用多线程
对一个Wi n d o w s 程序员来说,线程提供了非常大的好处。可以在应用程序中的任何地方创建多个
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.