2024年6月13日发(作者:)

delphi 线程用法

在 Delphi 中,线程可以通过两种方式来实现:使用 RTL 库的 System 单元中定义的

标准例程 BeginThread;使用 Delphi 的 VCL 库中的 TThread 对象。

**使用标准例程 BeginThread:**

此例程完整封装了 Win32 的 CreateThread 函数,是一个带有异常处理的标准 Pascal

函数,几乎可以处理所有自身的异常,相对于使用 Win32 的 CreateThread 函数,其安全

系数大大增强。

其完整声明如下:

```pascal

function BeginThread( SecurityAttributes: Pointer; StackSize: Integer;

ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: Integer; var ThreadId:

Integer): Integer;

```

- SecurityAttributes 参数是一个指向 SECURITY_ATTRIBUTES 结构的指针,用于设置

线程的访问权限,nil 表示为默认的安全属性。

- StackSize 参数用于设置分配给线程的栈空间大小,0 表示用默认值。

- ThreadFunc 用于指定一个函数,该函数在线程创建后开始执行代码时调用。

- Parameter 参数传递给 ThreadFunc 参数所指定的函数,常为 nil,或者设为一个

32 位的指针,指向一个数据结构。

- CreationFlags 参数用于指定线程创建后是不是立即执行,0 表示立即执行,

CREATE_SUSPENDED 表示处于挂起状态。

- ThreadId 参数表示为每个线程唯一的识别号,当 BeginThread 函数返回后,此参数

就是线程的识别号。

- 返回值为该线程的句柄,如果为0,表示线程没有创建成功,可以调用 Windows 的

GetLastError 函数分析错误的原因。

**使用 TThread 对象:**

Delphi 的一个缺陷是不支持多个线程同时访问它的 VCL 库,但 Delphi 的设计者们并

没有刻意掩饰这个缺陷,而是专门创建了一个 TThread 对象以解决这个问题。这个 TThread

对象封装了 Windows API 和 System 单元中有关线程运用的多个函数和例程,利用操作系

统分时段给各线程方式控制各个线程的“休眠”与“唤醒”以达到线程工作的同步,当被“唤

醒”后就调用 TThread 对象的 Synchronize 过程通知主线程,让主线程去真正地访问 VCL,

使得在一个应用程序中同时访问多个 VCL 库成为了可能。

在使用上它与 Delphi 中大多数对象不同的是 TThread 类是一个带有虚拟抽象对象方

法的类,我们不能直接创建 TThread 对象的实例,而必须先声明一个以 TThread 对象为基

类的类,再用这个派生类创建实例和操纵线程具体的类属性和方法。具体声明可参看其源代

码(c:/program files/borland/delphi 3/source/vcl/)或其它参考书。