CBC多线程学习(上)

新建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的进程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值