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.

 




Google
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Politica de Privacidad