2016-12-08 2 views
1

Tout d'abord, laissons cela de côté. Je suis un débutant à Ada, et la raison pour laquelle je veux être en mesure de le faire est parce que je voudrais programmer une inversion de priorité.Ada. Comment définir les priorités de tâches lors de l'exécution?

J'ai inclus,

with Ada.Task_Identification; 

J'ai aussi fait un type de tâche:

task type tasktype1 is 
     pragma PRIORITY (20); 
     entry gotosleep; 
end tasktype1; 

et je l'ai déclaré une tâche:

High : tasktype1; 

Maintenant, je voudrais changer la priorité de la tâche "Haute" à une autre priorité.

J'ai essayé d'écrire:

High.Prority(1); 

où je le mettrais dans les années principales commencent bloc.

et a déclaré un ID de tâche.

A : Task_Id; 

alors essayé de chercher la tâche en cours avec A := Current_Task;

puis mis Priority(3,A); dans le secteur commencent à la place.

est ici tout mon code de référence:

with Ada.Text_IO, Ada.Integer_Text_IO, System, Ada.Task_Identification; 
use Ada.Text_IO, Ada.Integer_Text_IO; 

procedure Main is 

task type tasktype1 is 
     pragma PRIORITY (20); 
     entry gotosleep; 
end tasktype1; 

pragma PRIORITY (3); -- This is the priority for the main program 

High : tasktype1; 

    A : Task_Id; 

task body tasktype1 is 
    begin 

accept gotosleep do 
    Put("Cow is not sleeping"); 

end gotosleep; 
end tasktype1; 




begin 

    A := Current_Task; 
    Priority(3, A); 

    Put_Line("This is an example of use of a task type"); 
    Put_Line("This is an example of use of a task type"); 
    Put_Line("This is an example of use of a task type"); 
    Put_Line("This is an example of use of a task type"); 
    Put_Line("This is an example of use of a task type"); 

end Main; 
+2

Vous pouvez définir des priorités de tâches lors de l'exécution en utilisant Ada.Dynamic_Priorities. Set_Priority' - voir [ARM D.5.1] (http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-D-5-1.html) (notez qu'il n'y a pas de sous-programme 'Priority' avec le profil que vous attendez!) –

Répondre

0

Voir: http://www.adaic.org/resources/add_content/standards/05rm/html/RM-D-5-1.html


TLDR;(si vous souhaitez définir/obtenir la priorité pour la tâche en cours)

  1. "avec" le paquet à votre source Ada:

    with Ada.Dynamic_Priorities; 
    
  2. Appelez la procédure Set_Priority

    Ada.Dynamic_Priorities.Set_Priority(1); 
    

Si vous souhaitez connaître le pri actuel oralité, vous pouvez appeler

Ada.Dynamic_Priorities.Get_Priority;