新建Thread Object(创建一个名为TNewThread的TThread子类)。 编译器会自动创建一个构造函数和Execute()函数。
自动生成的构造函数中有一个参数,如果为true的话线程创建后将进入挂起状态,直到线程对象的Resume()函数被调用才开始执行。如果为false则线程创建后会立刻开始执行。
Execute()Execute()函数就是线程函数,它包含了程序中所有需要并行执行的代码。除了共享相同的进程空间外,可以认为线程就是通过应用程序启动的程序。但在 编写线程函数的时候需要注意与单独程序的不同之处。因为线程与其他线程共享内存空间,所以必须确认没有覆盖应用程序中其它线程的内存地址。而另一方面,可以使用共享内存在线程之间进行通信。具体执行的代码使用Execute()函数重载的代码。
在需要调用线程的地方创建一个或者多个TNewThread对象
eg.TNewThread *thread1,*thread2;
thread1 = new TNewThread(true);//创建线程对象实例,且挂起线程。
thread2 = new TNewThread(false);//创建线程对象实例,且创建后立即执行线程。
开始执行正在挂起的线程可以调用thread1->Resume();
暂停正在执行的线程可以调用thread2->Suspend();
结束正在执行进程可以通过检查Terminated属性,可允许其它线程通知本线程终止。当其它线程试图终止本线程时,它调用 Terminate()函数。Terminate()函数将本线程的Terminated属性设置为true。Execute()函数通过检查和响应Terminated属性来实现Terminate()函数。下面的实例演示了这种做法:
void __fastcall TMyThread::Execute()
{
while( !Terminated )
{
.........//线程代码
}
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
thread2->Terminate();//通过调用Terminate()函数把Terminated属性改变成true
}
以上程序通过改变Terminate属性结束了thread2的进程。