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:
No parece impresionante, pero las dos cajas Edits, se están cargando al mismo tiempo, es decir concurrentemente.