niedziela, 5 października 2025

CreateThread, SuspendThread, ResumeThread - C++ Builder



#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE ha;
TColor draw_Color(int c)
{
TColor value;
switch(c)
{
case 0: value=clBlue; break;
case 1: value=clRed; break;
case 2: value=clGreen; break;
case 3: value=clYellow; break;
case 4: value=clBlack; break;
case 5: value=clTeal; break;
case 6: value=clPurple; break;
case 7: value=clLime;break;
case 8: value=clOlive; break;
case 9: value=clMaroon;break;
default: value=clWhite;break;
}

return value;
}

DWORD WINAPI TProc01(void* pr)
{
int ma=3;
int cl1;
int cl2;
int x_min,y_min,x_0,y_0,x_max,y_max,shape;
HANDLE MainWnd(pr);
x_min=y_min=ma;
x_max=Form1->Width-ma;
y_max=Form1->Height-ma;
x_0=Form1->Width/2;
y_0=Form1->Height/2;
int a1,a2,a3,a4;
while(true) {
shape=rand()%3;
if(shape==0)
{
cl1=rand()%10;
cl2=rand()%10;
Form1->Canvas->Pen->Color=draw_Color(cl1);
Form1->Canvas->Brush->Color=draw_Color(cl2);
a1=rand()%x_0+x_min;
a2=rand()%y_0+y_min;
a3=rand()%x_0+x_0-ma;
a4=rand()%y_0+y_0-ma;
Form1->Canvas->MoveTo(a1,a2);
Form1->Canvas->LineTo(a3,a4);
}
else if(shape==1)
{
cl1=rand()%10;
cl2=rand()%10;
Form1->Canvas->Pen->Color=draw_Color(cl1);
Form1->Canvas->Brush->Color=draw_Color(cl2);
a1=rand()%x_0+x_min;
a2=rand()%y_0+y_min;
a3=rand()%x_0+x_0-ma;
a4=rand()%y_0+y_0-ma;
Form1->Canvas->Ellipse(a1,a2,a3,a4);
}
else
{
cl1=rand()%10;
cl2=rand()%10;
Form1->Canvas->Pen->Color=draw_Color(cl1);
Form1->Canvas->Brush->Color=draw_Color(cl2);
a1=rand()%x_0+x_min;
a2=rand()%y_0+y_min;
a3=rand()%x_0+x_0-ma;
a4=rand()%y_0+y_0-ma;
Form1->Canvas->Rectangle(a1,a2,a3,a4);
}
}



return 0;


}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

 DWORD dw;
 ha=CreateThread(NULL,0,TProc01,this,CREATE_SUSPENDED,&dw);
 srand(time(NULL));
 if(!ha)
 {
ShowMessage("The thread could not be started");
Application->Terminate();
 }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ResumeThread(ha);
 Button1->Enabled=false;
 Button2->Enabled=true;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 SuspendThread(ha);
 Button1->Enabled=true;
 Button2->Enabled=false;

}