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