首先让我们解决这个问题。我是Ada的初学者,我希望能够做到这一点的原因是因为我想编写优先级倒置。
我已经包括了,
with Ada.Task_Identification;
我还创建了一个任务类型:
task type tasktype1 is
pragma PRIORITY (20);
entry gotosleep;
end tasktype1;
我宣布了一项任务:
High : tasktype1;
现在我想将任务“高”的优先级更改为其他优先级。
我试过写作:
High.Prority(1);
我将把它放在main的开始块中。
并声明了一个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;
答案 0 :(得分:0)
请参阅:http://www.adaic.org/resources/add_content/standards/05rm/html/RM-D-5-1.html
TLDR; (如果您希望设置/获取当前任务的优先级)
"与" Ada来源的包裹:
with Ada.Dynamic_Priorities;
调用Set_Priority过程
Ada.Dynamic_Priorities.Set_Priority(1);
如果您想了解当前的优先顺序,可以致电
Ada.Dynamic_Priorities.Get_Priority;
答案 1 :(得分:0)
首先,关于任务优先级,您必须检查操作系统的功能。
例如,在Linux或Solaris上,您只能以root用户身份使用priority。否则,无论您在代码中设置了什么,操作系统都会为每个任务赋予相同的优先级。 在Windows上,我没有检查可用的任务策略是什么,但是默认情况下,我会说所有任务都具有相同的优先级。
完成后,下面的解决方案应该可以正常工作。