ADA - Practica en ADA95

 
Vista:

Practica en ADA95

Publicado por pedro (1 intervención) el 20/08/2007 18:02:15
Hola a todos.
Tengo un problema, tengo que hacer una practica para septiembre y tengo un problema.
Tengo tres tareas ejecutandose y otra más que debe parar a estas tres anteriores. Toma valores de tipos protegidos, y he creado dos ventanas.
Como puedo parar estas tareas??? Y como puedo acceder desde las ventanas a una tarea que jecuta un manejador de interrupciones?
No sé como se hace :'(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Detener tareas y acceder a un manejador de interrupciones desde ventanas

Publicado por Alejandro (155 intervenciones) el 30/06/2023 19:45:32
Para detener las tareas en Ada, puedes utilizar variables compartidas y condiciones en los tipos protegidos. Un tipo protegido en Ada proporciona un mecanismo para sincronizar y controlar el acceso a los datos compartidos.

Aquí hay un ejemplo de cómo podrías detener las tres tareas utilizando un tipo protegido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
task type Mi_Tarea is
   entry Start;
end Mi_Tarea;
 
protected type Control_Tareas is
   entry Detener_Tareas;
   entry Reanudar_Tareas;
end Control_Tareas;
 
protected body Control_Tareas is
   Tareas_Detenidas : Boolean := False;
   Condicion_Detener : Condition;
   Condicion_Reanudar : Condition;
begin
   entry Detener_Tareas when not Tareas_Detenidas is
   begin
      Tareas_Detenidas := True;
   end Detener_Tareas;
 
   entry Reanudar_Tareas when Tareas_Detenidas is
   begin
      Tareas_Detenidas := False;
      Condicion_Reanudar.Broadcast;
   end Reanudar_Tareas;
 
   function Tareas_Detener is
   begin
      return Tareas_Detenidas;
   end Tareas_Detener;
 
   procedure Esperar_Reanudacion is
   begin
      if Tareas_Detenidas then
         Condicion_Reanudar.Wait;
      end if;
   end Esperar_Reanudacion;
end Control_Tareas;
 
task body Mi_Tarea is
begin
   -- Código de la tarea aquí
 
   Control_Tareas.Esperar_Reanudacion; -- Esperar hasta que las tareas sean reanudadas
end Mi_Tarea;

En cuanto a acceder a un manejador de interrupciones desde las ventanas, puedes utilizar una variable compartida o un tipo protegido para comunicarte con la tarea que ejecuta el manejador de interrupciones.

Aquí tienes un ejemplo utilizando un tipo protegido:

1
2
3
4
5
6
7
8
9
10
protected type Manejador_Interrupciones is
   procedure Ejecutar_Manejador;
end Manejador_Interrupciones;
 
protected body Manejador_Interrupciones is
   procedure Ejecutar_Manejador is
   begin
      -- Código del manejador de interrupciones aquí
   end Ejecutar_Manejador;
end Manejador_Interrupciones;

En tu ventana, puedes llamar al procedimiento `Ejecutar_Manejador` del tipo protegido `Manejador_Interrupciones` cuando sea necesario.

Recuerda que estos son ejemplos básicos y deberás adaptarlos a tu situación específica. Asegúrate de tener en cuenta los aspectos de concurrencia y sincronización al trabajar con tareas y variables compartidas en Ada.

Espero que esta información te sea útil para abordar tu práctica en Ada. ¡Buena suerte con tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar