C++ Builder当中,集成了线程操作类Thread,可使我们更方便的开发多线程应用程序。下面我们一起来看一下实例:
建立一个包含窗体的工程,然后点击文件->新建->其它,在弹出的对话框中选择Thread Object建立一个新线程,然后输入要定义的线程名如MyThread,点击确定,C++ Builder会自动建立一个线程单元。如:
//MyThread.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MyThread.h"
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall MyThread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
//线程初始化
__fastcall MyThread::MyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
//添加如下代码:
FreeOnTerminate=true;
Resume();
}
//---------------------------------------------------------------------------
//线程入口函数,在此函数中添加要执行任务的代码
void __fastcall MyThread::Execute()
{
while(FreeOnTerminate)
{
Synchronize(UpdateCaption); //异步执行UpdateCaption函数
Sleep(1000); //线程暂停 1s
}
}
//---------------------------------------------------------------------------
//这里便是我们要执行的任务,让窗体标题显示秒计时
void __fastcall MyThread::UpdateCaption()
{
Form1->Caption = u++;
}
至此,线程已经建立,下面我们要启动此线程,在窗体上添加一个按钮(Button1),代码如下:
//Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "MyThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
MyThread *MyThread1; //建立一个线程实例
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//在此启动线程
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyThread1 = new MyThread(true); //启动线程
}
//---------------------------------------------------------------------------
//在此停止线程
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MyThread1->FreeOnTerminate = false; //停止线程
}
//---------------------------------------------------------------------------
好了,编译运行吧!