|
[C++ Builder 4 Programming Bible]책에 있는 Thread 내용그대로 작성한것입니다.
5.0버전을 사용중인데.
책의 내용을 그대로 입력해서 3회이상 실행시 컴이 멈춰버립니다.
예제로 나온 3가지 모두 해 봤는데 상태는 모두 같구요. 어디에 버그가 있는지 알려 주세요.
//Header부
--------------------------------------------------------------------------------------
//---------------------------------------------------------------------------
#ifndef SyncUnitH
#define SyncUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CGAUGES.h"
//---------------------------------------------------------------------------
class TScreenThread : public TThread
{
private:
int GaugeNum;
void __fastcall Execute(void);
void __fastcall UpdateThread(void);
public:
__fastcall TScreenThread(int TheNum);
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TCGauge *CGauge1;
TCGauge *CGauge2;
TCGauge *CGauge3;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//Source 부
--------------------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "SyncUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TScreenThread::TScreenThread(int TheNum):TThread(true)
{
FreeOnTerminate = true;
GaugeNum=TheNum;
Resume();
}
//---------------------------------------------------------------------------
void __fastcall TScreenThread::Execute(void)
{
while(!Terminated)
{
Form1->CGauge1->Progress=0;
Form1->CGauge2->Progress=0;
Form1->CGauge3->Progress=0;
for(int x=0;x<100;x++)
Synchronize(UpdateThread);
}
}
//---------------------------------------------------------------------------
void __fastcall TScreenThread::UpdateThread(void)
{
switch(GaugeNum){
case 0: Form1->CGauge1->Progress++; break;
case 1: Form1->CGauge2->Progress++; break;
case 2: Form1->CGauge3->Progress++; break;
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TScreenThread *T;
for(int i=0;i<3;i++)
T=new TScreenThread(i);
}
//---------------------------------------------------------------------------
|