Hola, es mi primer intento en escribir algo en ADA y quería saber si funciona, pero sobretodo si la forma de pensar las tareas es correcta. Cualquier sugerencia es bienvendia.
EJERCICIO 5:
TASK Sumador IS
ENTRY Sumando1 (s: IN integer)
ENTRY Sumando2 (r: IN integer)
ENTRY Termine;
END Sumador
TASK BODY Sumador IS
var
bool: espero = true; integer:x,y; integer: count = 0
begin
while(espero AND count < 100){
SELECT
ACCEPT Sumando1 (s: IN integer) IS
x =s;
END Sumando1
ACCEPT Sumando2 (r: IN integer) IS
y =r;
END Sumando1
OR
ACCEPT Sumando2 (r: IN integer) IS
y =r;
END Sumando2
ACCEPT Sumando1 (s: IN integer) IS
x =s;
END Sumando1
OR DELAY 10
espero = false;
END
count++;
}
ACCEPT Termine;
end
END Sumador
TASK Programa1;
TASK BODY Programa1 IS
d:integer
begin
LOOP
d=getnum();
Sumador.Sumando1(d);
ENDLOOP
END Programa1;
TASK BODY Programa2 IS
d:integer
begin
LOOP
d=getnum();
Sumador.Sumando2(d);
ENDLOOP
END Programa2;
BEGIN
Sumador.Termine();
ENDAlgunos comentarios:
* Tengo el OR dentro del select porque hasta donde tengo entendido, no ejecuta el segundo acept hasta que acepto el primero y quizas llega el segundo número antes que el primero y me paso de los 10 segundo igual.
* No estoy seguro de si tenia que declarar los otros dos programas de esa forma, pero parecia lo más natural para aceptar las tareas.
* Para el main preferi agregar una nueva tarea que le avise que termino en lugar de no poner nada y quedar loopeando porque parecia más prolijo, pero no se si estará bien.
Desde ya,
Gracias