VI

UNIDAD MULTIPROCESAMIENTO

Tema 3 Aplicaciones Concurrentes c++builder


Se construye ahora, una aplicación con dos objetos concurrentes, el primero despliega los números del uno al mil, y el segundo lo mismo pero de dos en dos.

Procedimiento:

1.- File, Close All

2.- Crear el Thread Object, llamarlo y grabarlo como proceso1 con el procedimiento anteriormente descrito, no olvidar al final File, Close All

2.1.-Codigo de proceso1.h

//---------------------------------------------------------
#ifndef proceso1H
#define proceso1H
//----------------------------------------------------------
#include <vcl\Classes.hpp>
//----------------------------------------------------------
class proceso1 : public TThread
{
prívate:
protected:
int alfa;
void __fastcall Editar();
void __fastcall Execute();
public:
__fastcall proceso1(bool CreateSuspended);
};
//----------------------------------------------------------
#endif

2.2.-Codigo de proceso1.cpp

//----------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "proceso1.h"
//----------------------------------------------------------
__fastcall proceso1::proceso1(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//----------------------------------------------------------
void __fastcall proceso1::Execute()
{ //---- Place thread code here ----
for(alfa=1;alfa<=1000;alfa++)
{ Synchronize(Editar); };
}
//---------------------------------------------------------
void __fastcall proceso1::Editar()
{ Form1->Edit1->Text=alfa;
}

3.- Crear otro Thread Object, llamarlo y grabarlo como proceso2 con el procedimiento ya descrito, no olvidar al final File, Close All

3.1- Código de proceso2.h

//----------------------------------------------------------
#ifndef proceso2H
#define proceso2H
//---------------------------------------------------------
#include <vcl\Classes.hpp>
//----------------------------------------------------------
class proceso2 : public TThread
{
prívate:
protected:
int beta;
void __fastcall Editar();
void __fastcall Execute();
public:
__fastcall proceso2(bool CreateSuspended);
};
//----------------------------------------------------------
#endif

3.2- Código de proceso2.cpp

//----------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "proceso2.h"
//---------------------------------------------------------
__fastcall proceso2::proceso2(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//----------------------------------------------------------
void __fastcall proceso2::Execute()
{ //---- Place thread code here ----
for(beta=1;beta<=2000;beta=beta+2)
{ Synchronize(Editar); }
}
//----------------------------------------------------------
void __fastcall proceso2::Editar()
{ Form1->Edit2->Text = beta;
}

4.- File, New Aplication y no olvidar File, Save Project As dentro del folder tarea1.

5.- Colocar dos edits y dos buttons, en la aplicación, el

código de Unit1.cpp, es;

//----------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Unit1.h"
//----------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
#include "proceso1.cpp"
#include "proceso2.cpp"
//----------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ proceso1 *pro1;
pro1 = new proceso1(false);
pro1->Terminate();
}
//----------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ proceso2 *pro2;
pro2 = new proceso2(false);
pro2->Terminate();
}
//---------------------------------------------------------

* Observar que ahora hay dos include arriba

* cada botón activa su propio proceso

* Se usa el método Termínate(), para asegurarse que termine el proceso, pero es redundante porque el destructor se activa la terminar el ámbito del buttonclick();

1. La pantalla de salida es:

image121.jpg

No parece impresionante, pero las dos cajas Edits, se están cargando al mismo tiempo, es decir concurrentemente.

Politica de Privacidad