2016-12-08 18 views
1

まず最初に、この問題を解決してください。私はAdaの初心者です。私がこれをやりたいのは、優先度逆転をプログラムしたいからです。Ada。実行時にタスクの優先順位を設定する方法は?

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

と私はタスク宣言した:

High : tasktype1; 

今、私が変更したいが、私はタスクタイプをも行っている私は、

with Ada.Task_Identification; 

が含まれている

タスクの優先度を「他の優先度」に設定する。

私は書き込みを試してみました:私は、メインの中にそれを置くでしょう

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)を参照してください(サブプログラム 'Priority'にはあなたが期待するプロフィール!) –

答えて

0

を参照してください:ここで

は、参考のために私のコードのすべてですhttp://www.adaic.org/resources/add_content/standards/05rm/html/RM-D-5-1.html


TLDR。あなたのエイダ・ソースへのパッケージ "と"

  1. を(設定したい場合は/現在のタスクの優先度を取得する):

    with Ada.Dynamic_Priorities; 
    
  2. コールSet_Priority手順

    Ada.Dynamic_Priorities.Set_Priority(1); 
    

現在のプライ

Ada.Dynamic_Priorities.Get_Priority; 
関連する問題