返回

TThread类(TObject->TThread)

Unit:Classes

简介:TThread是一个抽象类,允许在应用程序中创建单独的执行线程。

描述

创建TThread的子代以表示多线程应用程序中的执行线程。TThread子体的每个新实例都是一个新的执行线程。TThread派生类的多个实例使C++Builder应用程序成为多线程的。

当应用程序运行时,它被加载到内存中,准备执行。此时,它变成一个进程,包含一个或多个线程,其中包含程序的数据、代码和其他系统资源。线程执行应用程序的一部分,并由操作系统分配CPU时间。一个进程的所有线程共享相同的地址空间,可以访问该进程抯 全局变量。

使用线程通过以下方式提高应用程序性能

管理来自多个通信设备的输入。
区分不同优先级的任务。例如,高优先级线程处理时间关键型任务,低优先级线程执行其他任务。

以下是使用线程时需要注意的问题和建议:

跟踪太多线程会消耗CPU时间;建议的限制是单处理器系统上每个进程16个活动线程。
当多个线程更新相同的资源时,它们必须同步以避免冲突。
大多数访问VCL对象并更新表单的方法只能从主VCL线程内调用,或使用同步对象,如TMultiReadExclusiveWriteSynchronizer。

要创建和使用新的线程对象,请执行以下操作:

选择File | New | Other | Thread Object可创建一个新单元,其中包含从TThread类派生的对象。
定义新的线程对象抯 构造器。
定义线程对象抯 方法,插入执行线程时应执行的代码。

注意:有关多线程程序示例,请参见线程演示。

警告:在TThread子体中引发但未捕获的异常抯 在IDE之外运行应用程序时,Execute方法可能会导致访问冲突。您可以通过为Execute方法提供try来防止这种访问冲突_最后是包含该方法主体的块。

代码示例:此示例显示用于通过套接字连接向服务器发送请求的线程的执行方法:

void __fastcall TMyClientThread::Execute()
{
// create a TWinSocketStream for reading and writing
TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket, 60000);
try
{
// fetch and process commands until the connection or thread is terminated
while (!Terminated && ClientSocket1->Active)
{
try
{
char buffer[10];
GetNextRequest(buffer); // GetNextRequest must be a thread-safe method

// write the request to the server
pStream->Write(buffer, strlen(buffer) + 1);
// continue the communication (eg read a response from the server)
...
}
catch (Exception &E)
{
if (!E.ClassNameIs("EAbort"))
Synchronize(HandleThreadException()); // you must write HandleThreadException
}
}
}
__finally
{
delete pStream;
}
}