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/)或其它参考书。


发布评论