Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Windows
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Execute () ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ Π·Π°Π½ΡΡΠ°Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π»Π°ΡΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ FreeOnTerminate=false. FMain→reThread2→Lines→Add (IntToStr (count) + «) «+ «max = «+ max + «, min = «+ min); //Π²ΡΠ²ΠΎΠ΄ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. Synchronize (&Sinchr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Windows (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (event). ΠΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ: Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅. ΠΠΎΠ³Π΄Π° ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π΅Π³ΠΎ Π²ΠΈΠ΄ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΠΉ ΡΡΠ°Π·Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ VCL ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ TEvent.
ΠΠ΅ΡΠΎΠ΄ CreatEvents (): Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° TEvent, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΠ΅ΡΠΎΠ΄ ResetEvent (): ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠ΅ΡΠΎΠ΄ SetEvent (): ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
WaitForSingleObject (): ΠΠ°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΠΏΠΎΡΠ»ΡΡ ΡΠΈΠ³Π½Π°Π» ΠΎΠ± Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΠ΅.
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π· Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ° suspend. ΠΠ»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΡΠΎΠΊΠ° Resume. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Ρ. ΠΊ. ΠΌΠ΅ΡΠΎΠ΄ Suspend ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠ°, a Resume ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ. ΠΠΎΡΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠ΅ΡΡΠΈΠΊ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ Π² Π½ΠΎΠ»Ρ, Ρ. Π΅., Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠ·Π²Π°Π»ΠΈ ΠΏΡΡΡ ΡΠ°Π· ΠΌΠ΅ΡΠΎΠ΄ Suspend, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π° Resume, Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ (ΠΏΡΡΡΠΉ) Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Resume Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Execute () ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π§ΡΠΎΠ±Ρ Π·Π°Π½ΡΡΠ°Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π»Π°ΡΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ FreeOnTerminate=false.
4. ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π€Π°ΠΉΠ» UMain.cpp.
#include.
#pragma hdrstop.
#include «UMain.h» .
#include «UThread1.h» .
#include «UThread2.h» .
#include «UThread3.h» .
//—————————————————————————————————————;
#pragma package (smart_init).
#pragma resource «*.dfm» .
TFMain *FMain;
ThreadCreatMassiv *thread1;
ThreadMinMax *thread2;
ThreadIndex *thread3;
//—————————————————————————————————————;
__fastcall TFMain: TFMain (TComponent* Owner).
: TForm (Owner).
{.
}.
//—————————————————————————————————————;
void __fastcall TFMain: btnStartClick (TObject *Sender).
{.
if (eN->Text == «» || eT->Text == «») {.
StatusBar1->Panels->Items[0]->Text="ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ" ;
}else{.
StatusBar1->Panels->Items[0]->Text="" ;
reThread1->Clear ();
reThread2->Clear ();
reThread3->Clear ();
g_Event[0] = CreateEvent (NULL, FALSE, FALSE, NULL); //Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅.
g_Event[1] = CreateEvent (NULL, FALSE, TRUE, NULL); //Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅.
SetEvent (g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ResetEvent (g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
thread1 = new ThreadCreatMassiv (true); //ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΡΠΎΠΊ Π² ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ (true).
thread1->N = StrToInt (eN->Text); //ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΡ.
thread1->T = StrToInt (eT->Text);
thread1->Resume (); //ΠΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
thread2 = new ThreadMinMax (true);
thread2->N = StrToInt (eN->Text);
thread2->T = StrToInt (eT->Text);
thread2->Resume ();
thread3 = new ThreadIndex (true);
thread3->N = StrToInt (eN->Text);
thread3->T = StrToInt (eT->Text);
thread3->Resume ();
}.
}.
//—————————————————————————————————————;
void __fastcall TFMain: btnStopClick (TObject *Sender).
{.
thread1->Suspend (); //ΠΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠ°.
thread2->Suspend ();
thread3->Suspend ();
}.
//—————————————————————————————————————;
void __fastcall TFMain: btnExitClick (TObject *Sender).
{.
FMain->Close ();
}.
//—————————————————————————————————————;
Π€Π°ΠΉΠ» UThread1.cpp.
#include.
#pragma hdrstop.
#include «UThread1.h» .
#include «UMain.h» .
#include «UThread2.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 ThreadCreatMassiv: UpdateCaption ().
// {.
// Form1->Caption = «Updated in a thread» ;
// }.
//—————————————————————————————————————;
__fastcall ThreadCreatMassiv: ThreadCreatMassiv (bool CreateSuspended).
: TThread (CreateSuspended).
{.
}.
//—————————————————————————————————————;
void __fastcall ThreadCreatMassiv: Execute ().
{.
int min = -999;
int max = 999;
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ.
while (true) {.
WaitForSingleObject (FMain->g_Event[0], INFINITE);
ResetEvent (FMain->g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
ResetEvent (FMain->g_Event[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
srand (time (NULL));
for (int i = 0; i < N; i++) {.
FMain->A[i] = rand () % (min max) + min; //Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ.
}.
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊ.
Synchronize (&Sinchr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Sleep (T*1000);
}.
//—————————————————————————————————————;
}.
void __fastcall ThreadCreatMassiv: Sinchr ().
{.
AnsiString rezult;
for (int i = 0; i < N; i++) {.
rezult += IntToStr (FMain->A[i]) + «, «;
SetEvent (FMain->g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
SetEvent (FMain->g_Event[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
}.
FMain->reThread1->Lines->Add (IntToStr (count) + «) «+ rezult); //Π²ΡΠ²ΠΎΠ΄ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π€Π°ΠΉΠ» Thread2.cpp.
#include.
#pragma hdrstop.
#include «UThread2.h» .
#include «UMain.h» .
#include «UThread1.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 ThreadSredZnach: UpdateCaption ().
// {.
// Form1->Caption = «Updated in a thread» ;
// }.
//—————————————————————————————————————;
__fastcall ThreadMinMax: ThreadMinMax (bool CreateSuspended).
: TThread (CreateSuspended).
{.
}.
//—————————————————————————————————————;
void __fastcall ThreadMinMax: Execute ().
{.
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ.
while (true){.
WaitForSingleObject (FMain->g_Event[1], INFINITE); //ΠΆΠ΄ΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
ResetEvent (FMain->g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
ResetEvent (FMain->g_Event[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
max = 0;
min = 0;
max = FMain->A[0];
for (int i = 0; i.
if (FMain->A[i] < min).
{.
min = FMain->A[i];
}.
if (FMain->A[i] > max).
{.
max = FMain->A[i];
}.
}.
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊ.
Synchronize (&Sinhr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Sleep (T*1000);
}.
}.
//—————————————————————————————————————;
void __fastcall ThreadMinMax: Sinhr ().
{.
FMain->reThread2->Lines->Add (IntToStr (count) + «) «+ «max = «+ max + «, min = «+ min); //Π²ΡΠ²ΠΎΠ΄ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
SetEvent (FMain->g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
SetEvent (FMain->g_Event[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
}.
Π€Π°ΠΉΠ» UThread3.cpp.
#include.
#pragma hdrstop.
#include «UThread3.h» .
#include «UMain.h» .
#include «UThread1.h» .
#include «UThread2.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 ThreadIndex: UpdateCaption ().
// {.
// Form1->Caption = «Updated in a thread» ;
// }.
//—————————————————————————————————————;
__fastcall ThreadIndex: ThreadIndex (bool CreateSuspended).
: TThread (CreateSuspended).
{.
}.
//—————————————————————————————————————;
void __fastcall ThreadIndex: Execute ().
{.
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ.
int tN = N/3;
while (true){.
WaitForSingleObject (FMain->g_Event[1], INFINITE); //ΠΆΠ΄ΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
ResetEvent (FMain->g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
ResetEvent (FMain->g_Event[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
rezult = «» ;
for (int i = 0; i < N; i++){.
sum += FMain->A[i]; //ΡΡΠΌΠΌΠ° Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°.
}.
arg = sum/N; // ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅.
for (int i = 0; i < N; i++){.
raz = arg FMain->A[i]; // ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°.
rezult += FloatToStr (raz) + «, «;
}.
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊ.
Synchronize (&Sinhr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Sleep (T*1000);
}.
}.
//—————————————————————————————————————;
void __fastcall ThreadIndex: Sinhr (){.
FMain->reThread3->Lines->Add (IntToStr (count) + «) «+ rezult); //Π²ΡΠ²ΠΎΠ΄ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
SetEvent (FMain->g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
SetEvent (FMain->g_Event[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.
}.