Code: Select all
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
class TMyThread : public TThread
{
private:
void __fastcall MyTimer(TObject *Sender);
protected:
void __fastcall Execute();
public:
AnsiString myadr;
AnsiString msg;
__fastcall TMyThread(const String &Adr);
void __fastcall MyMemo1();
};
int ThreadsRunning = 0;
bool Exiting = false;
int i;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall TMyThread::TMyThread(const AnsiString &Adr)
: TThread(true), myadr(Adr)
{
FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::MyMemo1()
{
Form1->Memo1->Lines->Add(msg);
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::MyTimer(TObject *Sender)
{
Form1->Memo3->Lines->Add("timer");
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
TTimer *asd = new TTimer(NULL);
asd->Interval = 500;
asd->OnTimer = &MyTimer;
asd->Enabled = true;
msg = myip(StrToInt(myadr));
Synchronize(&MyMemo1);
Sleep(1000);
delete asd;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
for(i = 0; i < 5; ++i)
{
TMyThread *TMyTh = new TMyThread(IntToStr(i+1));
Memo2->Lines->Add("start: " + IntToStr(TMyTh->Handle));
TMyTh->OnTerminate = &ThreadTerminated;
TMyTh->Resume();
Panel1->Caption=ThreadsRunning;
++ThreadsRunning;
}
} catch(...){ }
Caption = "Start " + IntToStr(ThreadsRunning) + " threads created";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ThreadTerminated(TObject *Sender)
{
Memo1->Clear();
Memo2->Clear();
--ThreadsRunning;
TMyThread *TMyTh = static_cast<TMyThread*>(Sender);
Memo2->Lines->Add("old: " + IntToStr(TMyTh->Handle));
TMyTh = new TMyThread(IntToStr(i++));
Memo2->Lines->Add("new: " + IntToStr(TMyTh->Handle));
TMyTh->OnTerminate = &ThreadTerminated;
TMyTh->Resume();
Panel1->Caption=ThreadsRunning;
++ThreadsRunning;
}
//---------------------------------------------------------------------------