C++ Builder 参考手册 ➙ System::Classes ➙ TThread
System::Classes::TThread 是线程类,用于创建线程
- 简介
- 成员 (类型、属性、方法、事件)
- 例子
一. System::Classes::TThread 简介
- 继承关系:
System::TObject
⠀╙ System::Classes::TThread - 头文件:
#include <System.Classes.hpp> - 命名空间:
System::Classes - System::Classes::TThread 线程类是纯虚类,子类必须实现 Execute 方法。
二. System::Classes::TThread 成员
1. System::Classes::TThread 类型成员
| 类型 | 说明 |
|---|---|
| public: | |
| TSystemTimes | 用于获取 CPU 使用率的结构体类型 |
2. System::Classes::TThread 属性
| 属性 | 类型 | 说明 |
|---|---|---|
| public: | ||
| Current | TThread * | 获取当前代码所在的线程 |
| CurrentThread | TThread * | 获取当前代码所在的线程 |
| ExternalThread | bool | 是否外部创建的线程 |
| FatalException | System::TObject * | 如果线程由于抛出异常没有捕获而结束, 这个属性指向这个异常, 可以在这个线程的 OnTerminate 事件里面 通过 FatalException 判断线程 是否由于异常而结束的 |
| Finished | bool | 线程已经结束 |
| FreeOnTerminate | bool | 线程结束时是否自动销毁 |
| Handle | NativeUInt | 线程句柄。 如果是 Windows 平台,是 Windows API 的线程句柄 |
| IsSingleProcessor | bool | 系统是否单个单核处理器 |
| Priority | TThreadPriority | 线程优先级 |
| ProcessorCount | int | 系统处理器核心总数 |
| Started | bool | 线程是否开始执行 |
| Suspended | bool | 线程是否被挂起 |
| ThreadID | unsigned | 线程的ID。 如果是 Windows 平台,是 Windows API 的线程ID |
| protected: | ||
| ReturnValue | int | 线程结束时给其他等待线程的返回值, 是 WaitFor 方法的返回值 |
| Terminated | bool | 是否希望线程结束, 在线程里面发现这个属性为 true 需要尽快的结束执行 |
3. System::Classes::TThread 方法
| 方法 | 说明 |
|---|---|
| public: | |
| AfterConstruction | 重载了 System::TObject 的 AfterConstruction 方法, 在构造函数结束时执行 Execute 方法开始执行线程 |
| CheckTerminated | 返回当前线程的 Terminated 属性, 在线程类里面需要直接访问 Terminated 属性, 只有在线程类外部才需要用这个方法。 |
| CreateAnonymousThread | 创建一个匿名线程:lambda 表达式或 TProc |
| ForceQueue | 把一个函数加入异步执行队列, 可以在主线程里面调用这个方法 |
| GetCPUUsage | 获取 CPU 使用率 |
| GetSystemTimes | 初始化获取 CPU 使用率的结构体 |
| GetTickCount | 获取从系统启动开始到现在的毫秒数 |
| NameThreadForDebugging | 给线程起个名字,只用来调试程序, 如果不是调试方式运行的程序,这个函数什么也不执行 |
| Queue | 把一个函数加入异步执行队列, 这个函数将在主线程里面执行 |
| RemoveQueuedEvents | 从异步执行队列里面去除要执行的函数 |
| Resume | 继续执行已经挂起的线程 |
| SetReturnValue | 在线程类的外部设置线程 ReturnValue 属性的值 |
| Sleep | 挂起线程一段时间 (毫秒) |
| SpinWait | 线程空转暂短的一段时间 (空转次数) |
| Start | 开始执行创建时就挂起的线程 |
| StaticQueue | 过时了的方法,需要使用 Queue 代替 |
| StaticSynchronize | 过时了的方法, 需要使用 Synchronize 代替 |
| Suspend | 挂起线程 |
| Synchronize | 在主线程里面同步执行一个函数 |
| Terminate | 把 Terminated 属性置位 true, 线程执行过程中发现 Terminated 属性为 true 需要尽快结束执行 |
| TThread | 构造函数 |
| ~TThread | 析构函数 |
| WaitFor | 等待线程结束,并且返回 ReturnValue 属性的值 |
| Yield | 让 CPU 去执行其他线程 |
| protected: | |
| CheckThreadError | 线程内部调用的函数,检查执行是否有错误, 如果执行有错误,会抛出 EThread 异常 |
| DoTerminate | 线程内部调用的函数,触发 OnTerminate 事件 |
| Execute | 纯虚函数,子类需要重载实现这个函数, 这是线程执行的函数 |
| SetFreeOnTerminate | 修改 FreeOnTerminate 属性会调用这个函数 |
| TerminatedSet | 当 Terminated 属性置为 true 时执行, 由 Terminate 函数内部调用, 这是虚函数,子类可以重载 |
| TObject:: | 从 System::TObject 继承过来的 |
| public: | 从 System::TObject 继承过来的 |
| BeforeDestruction | 在执行析构函数之前会自动调用 BeforeDestruction |
| ClassInfo | 返回运行时类型信息表 (RTTI table) |
| ClassName | 获取类名,不包含命名空间的类名字符串 |
| ClassNameIs | 判断类名是否为参数指定的字符串 |
| ClassParent | 返回父类的类型信息 |
| ClassType | 返回类的类型信息 |
| CleanupInstance | 清除长字符串、Variants、接口变量等 |
| DefaultHandler | 默认的消息处理 |
| Dispatch | 处理消息的函数 |
| DisposeOf | 强制销毁对象 |
| Equals | 比较当前对象和 Obj 对象是否相同 |
| FieldAddress | 通过成员名称返回成员的地址 |
| Free | 销毁对象 (Delphi) |
| FreeInstance | 释放 NewInstance 分配的内存 |
| GetHashCode | 返回对象的 hash 值 |
| GetInterface | 获取指定的接口 |
| GetInterfaceEntry | 获取接口项目 |
| GetInterfaceTable | 获取接口表 |
| InheritsFrom | 当前对象的类是否从 AClass 继承过来的 |
| InitInstance | 初始化成员,给他们清零 |
| InstanceSize | 返回给实例数据分配内存需要多少字节数 |
| MethodAddress | 通过名称返方法的地址 |
| MethodName | 通过方法的地址返回名称 |
| NewInstance | 给实例分配内存,并且返回新的实例的地址 |
| QualifiedClassName | 返回包含命名空间的类名 |
| SafeCallException | 处理异常的函数 |
| ToString | 转为字符串 |
| UnitName | 返回类所在的命名空间 |
| UnitScope | 返回类所在的命名空间 |
4. System::Classes::TThread 事件
| 事件 | 说明 |
|---|---|
| OnTerminate | 当线程结束执行时产生的事件, 可以在这个事件里面检查 FatalException 属性的值 来判断线程是否异常结束 |
三. System::Classes::TThread 例子
很多属性、方法和事件都带例子,可以参考以下方法或事件的例子:
也可以参考其他属性、方法或事件的例子。
相关:
- System::Syncobjs::TCriticalSection
- System::Syncobjs::TEvent
- System::Syncobjs::TMutex
- System::Classes::TComponent::BeginInvoke
- System::Classes::TComponent::EndInvoke
- System::Classes::TComponent::EndFunctionInvoke
- System::TObject
- VCL 类继承关系
C++ Builder 参考手册 ➙ System::Classes ➙ TThread