Ich habe eine sporadische Aufgabe, die etwas drucken. Ich möchte diese Aufgabe zu einem bestimmten Zeitpunkt, z. B. 16:40 Uhr, ausführen.Sporadic Task wird zu einer bestimmten Zeit ausgeführt
Ich habe eine Idee, zyklische Aufgabe zu erstellen, die Zeit überprüft und wenn die Zeit gleich meiner angegebenen Zeit ist, diese zyklische Aufgabe die Barriere der sporadischen Aufgabe erneut. Aber wie überprüfe ich, ob meine angegebene Zeit (dargestellt als Unix Timestamp oder String) gleich der Zeit ist? Wie konvertiert man meine angegebene Zeit in Ada.Real_Time.Time nach Ravenscar Profile?
Wie kann ich das in Ada erreichen?
Hier ist mein Code:
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;
Es sieht aus wie Sie eine bürgerliche Zeit zu einem monotonen 'Time' konvertieren mögen, die eine andere _epoch_ haben. Wenn sich Ihre Umgebung nicht mit der bürgerlichen Zeit synchronisieren kann, warum sollten Sie nicht einfach einen geeigneten Punkt in der Zukunft verschieben? – trashgod