Changeset 9 for trunk/Packages/Kernel/UKernel.pas
- Timestamp:
- Aug 29, 2016, 5:17:45 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:ignore
-
old new 3 3 lib 4 4 heaptrclog.trc 5 ChronOS.exe
-
- Property svn:ignore
-
trunk/Packages/Kernel
-
Property svn:ignore
set to
lib
-
Property svn:ignore
set to
-
trunk/Packages/Kernel/UKernel.pas
r8 r9 6 6 7 7 uses 8 Classes, Math, SysUtils, UList, Contnrs, UFileSystem, UMemory, UScreen, UDevice; 8 Classes, Math, SysUtils, UList, Contnrs, UFileSystem, UMemory, UScreen, UDevice, 9 fgl, UApp, UScheduler; 9 10 10 11 type 11 TTask = class;12 TScheduler = class;13 14 TTaskEvent = procedure(Task: TTask) of object;15 16 TTaskState = (tsStopped, tsRunning, tsSuspended, tsWaiting);17 18 TIPCMessage = class19 Name: string;20 Action: string;21 22 end;23 24 TWaitReason = (wrSleep, wrMessage);25 26 { TTask }27 28 TTask = class(TNamedObject)29 Scheduler: TScheduler;30 State: TTaskState;31 WaitReason: TWaitReason;32 WakeUpTime: TDateTime;33 Terminated: Boolean;34 EntryPoint: TTaskEvent;35 Messages: TObjectQueue; // TQueue<TIPMessage>36 procedure WaitForMessage;37 procedure Sleep(Duration: TDateTime);38 constructor Create; virtual;39 destructor Destroy; override;40 end;41 42 TTaskClass = class of TTask;43 44 { TScheduler }45 46 TScheduler = class47 TaskClass: TTaskClass;48 Tasks: TNamedObjectList; // TList<TTask>49 Running: Boolean;50 function GetCurrentTask: TTask; virtual;51 procedure Start; virtual;52 procedure Stop; virtual;53 function AddTask(Name: string; EntryPoint: TTaskEvent): TTask; virtual;54 procedure SwitchNext; virtual;55 constructor Create; virtual;56 destructor Destroy; override;57 end;58 59 TSchedulerClass = class of TScheduler;60 61 12 { TDrive } 62 13 … … 77 28 procedure InitVideo; 78 29 public 79 Apps: TNamedObjectList ; // TList<TApp>80 Drives: TNamedObjectList ; // TList<TDrive>30 Apps: TNamedObjectList<TApp>; 31 Drives: TNamedObjectList<TDrive>; 81 32 Scheduler: TScheduler; 82 33 SchedulerClass: TSchedulerClass; 83 34 FileSystemClass: TFileSystemClass; 84 Devices: TNamedObjectList ; // TList<TDevice>85 Screens: T ObjectList; // TList<TScreen>35 Devices: TNamedObjectList<TDevice>; 36 Screens: TFPGObjectList<TScreen>; 86 37 procedure AppExecute(AFile: TFile); 87 38 procedure Init; … … 92 43 93 44 implementation 94 95 uses96 UApp;97 45 98 46 … … 107 55 begin 108 56 FileSystem.Free; 109 inherited Destroy;110 end;111 112 { TTask }113 114 procedure TTask.WaitForMessage;115 begin116 WaitReason := wrMessage;117 State := tsWaiting;118 Scheduler.SwitchNext;119 end;120 121 procedure TTask.Sleep(Duration: TDateTime);122 begin123 WakeUpTime := Now + Duration;124 State := tsWaiting;125 WaitReason := wrSleep;126 Scheduler.SwitchNext;127 end;128 129 constructor TTask.Create;130 begin131 Messages := TObjectQueue.Create;132 end;133 134 destructor TTask.Destroy;135 begin136 Messages.Free;137 inherited Destroy;138 end;139 140 { TScheduler }141 142 function TScheduler.GetCurrentTask: TTask;143 begin144 Result := nil;145 end;146 147 procedure TScheduler.Start;148 begin149 Running := True;150 end;151 152 procedure TScheduler.Stop;153 begin154 Running := False;155 end;156 157 function TScheduler.AddTask(Name: string; EntryPoint: TTaskEvent): TTask;158 var159 NewTask: TTask;160 begin161 NewTask := TaskClass.Create;162 NewTask.Scheduler := Self;163 NewTask.Name := Name;164 NewTask.EntryPoint := EntryPoint;165 Tasks.Add(NewTask);166 Result := NewTask;167 end;168 169 procedure TScheduler.SwitchNext;170 begin171 172 end;173 174 constructor TScheduler.Create;175 begin176 TaskClass := TTask;177 Tasks := TNamedObjectList.Create;178 end;179 180 destructor TScheduler.Destroy;181 begin182 if Running then Stop;183 Tasks.Free;184 57 inherited Destroy; 185 58 end; … … 264 137 constructor TKernel.Create; 265 138 begin 266 Devices := TNamedObjectList .Create;267 Drives := TNamedObjectList .Create;268 Apps := TNamedObjectList .Create;139 Devices := TNamedObjectList<TDevice>.Create; 140 Drives := TNamedObjectList<TDrive>.Create; 141 Apps := TNamedObjectList<TApp>.Create; 269 142 Scheduler := TScheduler.Create; 270 Screens := T ObjectList.Create;143 Screens := TFPGObjectList<TScreen>.Create; 271 144 end; 272 145
Note:
See TracChangeset
for help on using the changeset viewer.