C++ Builder 多线程编程

    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; //停止线程
}
//---------------------------------------------------------------------------

好了,编译运行吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值