0
何かを印刷する散発的な作業があります。私は指定された時間すなわち4:40 PMにこのタスクを実行したいと思います。散発的なタスクは特定の時刻に実行されます
時間をチェックし、時間が指定された時間と等しいサイクリックタスクを作成するアイデアがあります。この周期的なタスクは、散発的なタスクの障壁を再表示します。しかし、私が指定した時刻(Unixのタイムスタンプや文字列で表される)が今の時刻と等しいかどうかをチェックする方法はありますか?私の指定した時刻をRavenscar ProfileにしたがってAda.Real_Time.Timeに変換する方法は?
どのように私はそれを達成できますか?ここで
は私のコードです:
sprinkler.ads
pragma Profile(Ravenscar);
with GNATCOLL.Ravenscar.Simple_Cyclic_Task;
with GNATCOLL.Ravenscar.Simple_Sporadic_Task;
package Sprinkler is
Counter : Integer := 0;
MyTime : String := "4:45";
procedure My_Cyclic_Operation;
package My_Cyclic_Task is new GNATCOLL.Ravenscar.Simple_Cyclic_Task
(Task_Priority => 10,
Phase => 0,
Period => 1000,
Cyclic_Operation => My_Cyclic_Operation);
procedure My_Sporadic_Operation;
package My_Sporadic_Task is new GNATCOLL.Ravenscar.Simple_Sporadic_Task
(Task_Priority => 10,
Minimum_Interelease_Time => 1_000,
Protocol_Ceiling => 15,
Sporadic_Operation => My_Sporadic_Operation);
end Sprinkler;
sprinkler.adb
pragma Profile(Ravenscar);
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
package body Sprinkler is
procedure My_Cyclic_Operation is
begin
-- Here I want to run My_Sporadic_Operation when time at now is equal to my specified time
null;
end My_Cyclic_Operation;
procedure My_Sporadic_Operation is
begin
Put_Line("Sporadic at specified time!");
end;
end Sprinkler;
に変換する
Duration
Ada.Real_Time.To_Time_Span
。あなたの環境が市民時代と同期できない限り、将来的に適切なポイントまで「遅らせる」だけではないのはなぜですか? – trashgod