2016-12-08 3 views
1

Прежде всего, давайте избавимся от этого. Я новичок в Ada, и причина, по которой я хочу это сделать, - это то, что я хочу запрограммировать Inversion Inversion.Ada. Как установить приоритеты задач во время выполнения?

Я включил,

with Ada.Task_Identification; 

Я также сделал тип задачи:

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

и я объявил задачу:

High : tasktype1; 

Теперь я хотел бы изменить приоритет задачи «Высокий» на какой-то другой приоритет.

Я попытался написания:

High.Prority(1); 

, где я бы поставил его в основном начинают блок.

и объявлен Task_ID.

A : Task_Id; 

затем попытался извлечь текущую задачу с A := Current_Task;

, а затем положить Priority(3,A); в сети начинают вместо этого.

Вот весь мой код для справки:

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

Вы можете установить приоритеты задач во время выполнения, используя 'Ada.Dynamic_Priorities. Set_Priority' - см. [ARM D.5.1] (http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-D-5-1.html) (обратите внимание, что подпрограмма «Приоритет» отсутствует профиль, который вы ожидаете!) –

ответ

0

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


TLDR;(если вы хотите установить/получить приоритет для текущей задачи)

  1. "с" пакетом к источнику Ada:

    with Ada.Dynamic_Priorities; 
    
  2. вызова процедуры Set_Priority

    Ada.Dynamic_Priorities.Set_Priority(1); 
    

Если вы хотите узнать текущий pri вы можете позвонить по телефону

Ada.Dynamic_Priorities.Get_Priority; 
Смежные вопросы