Changeset 6 for trunk/UKernel.pas
- Timestamp:
- Nov 23, 2014, 11:17:11 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UKernel.pas
r5 r6 10 10 type 11 11 TTask = class; 12 TScheduler = class; 12 13 13 14 TTaskEvent = procedure(Task: TTask) of object; 14 15 15 TTaskState = (tsStopped, tsRunning, tsSuspended); 16 TTaskState = (tsStopped, tsRunning, tsSuspended, tsWaiting); 17 18 TIPCMessage = class 19 Name: string; 20 Action: string; 21 22 end; 23 24 TWaitReason = (wrSleep, wrMessage); 16 25 17 26 { TTask } 18 27 19 28 TTask = class(TNamedObject) 20 Name: string;29 Scheduler: TScheduler; 21 30 State: TTaskState; 31 WaitReason: TWaitReason; 32 WakeUpTime: TDateTime; 22 33 Terminated: Boolean; 23 34 EntryPoint: TTaskEvent; 35 Messages: TObjectQueue; // TQueue<TIPMessage> 36 procedure WaitForMessage; 37 procedure Sleep(Duration: TDateTime); 24 38 constructor Create; virtual; 39 destructor Destroy; override; 25 40 end; 26 41 … … 33 48 Tasks: TNamedObjectList; // TList<TTask> 34 49 Running: Boolean; 50 function GetCurrentTask: TTask; virtual; 35 51 procedure Start; virtual; 36 52 procedure Stop; virtual; 37 53 function AddTask(Name: string; EntryPoint: TTaskEvent): TTask; virtual; 54 procedure SwitchNext; virtual; 38 55 constructor Create; virtual; 39 56 destructor Destroy; override; … … 56 73 constructor Create; virtual; 57 74 procedure Service(Index: Integer; DataIn, DataOut: TMemory); virtual; 75 end; 76 77 TTimer = class 78 Period: TDateTime; 79 end; 80 81 TScreen = class 82 Size: TPoint; 83 DPI: Integer; 58 84 end; 59 85 … … 67 93 FileSystemClass: TFileSystemClass; 68 94 Devices: TNamedObjectList; // TList<TDevice> 95 Screens: TObjectList; // TList<TScreen> 69 96 procedure AppExecute(AFile: TFile); 70 97 procedure Init; … … 106 133 { TTask } 107 134 135 procedure TTask.WaitForMessage; 136 begin 137 WaitReason := wrMessage; 138 State := tsWaiting; 139 Scheduler.SwitchNext; 140 end; 141 142 procedure TTask.Sleep(Duration: TDateTime); 143 begin 144 WakeUpTime := Now + Duration; 145 State := tsWaiting; 146 WaitReason := wrSleep; 147 Scheduler.SwitchNext; 148 end; 149 108 150 constructor TTask.Create; 109 151 begin 110 152 Messages := TObjectQueue.Create; 153 end; 154 155 destructor TTask.Destroy; 156 begin 157 Messages.Free; 158 inherited Destroy; 111 159 end; 112 160 113 161 { TScheduler } 114 162 163 function TScheduler.GetCurrentTask: TTask; 164 begin 165 Result := nil; 166 end; 167 115 168 procedure TScheduler.Start; 116 169 begin … … 128 181 begin 129 182 NewTask := TaskClass.Create; 183 NewTask.Scheduler := Self; 130 184 NewTask.Name := Name; 131 185 NewTask.EntryPoint := EntryPoint; 132 186 Tasks.Add(NewTask); 133 187 Result := NewTask; 188 end; 189 190 procedure TScheduler.SwitchNext; 191 begin 192 134 193 end; 135 194 … … 201 260 Apps := TNamedObjectList.Create; 202 261 Scheduler := TScheduler.Create; 262 Screens := TObjectList.Create; 203 263 end; 204 264 205 265 destructor TKernel.Destroy; 206 266 begin 267 Screens.Free; 207 268 Scheduler.Free; 208 269 Apps.Free;
Note:
See TracChangeset
for help on using the changeset viewer.