Changeset 3 for trunk/UKernel.pas
- Timestamp:
- Nov 22, 2014, 11:50:49 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UKernel.pas
r2 r3 9 9 10 10 type 11 TEvent = procedure of object; 11 12 12 13 TTaskState = (tsStopped, tsRunning, tsSuspended); 13 14 14 TTask = class 15 { TTask } 16 17 TTask = class(TNamedObject) 15 18 Name: string; 16 19 State: TTaskState; 20 EntryPoint: TEvent; 21 constructor Create; virtual; 17 22 end; 18 23 19 TTask s = class(TObjectList)24 TTaskClass = class of TTask; 20 25 26 { TScheduler } 27 28 TScheduler = class 29 TaskClass: TTaskClass; 30 Tasks: TNamedObjectList; // TList<TTask> 31 Running: Boolean; 32 procedure Start; virtual; 33 procedure Stop; 34 function AddTask(Name: string; EntryPoint: TEvent): TTask; virtual; 35 constructor Create; virtual; 36 destructor Destroy; override; 21 37 end; 22 38 23 TScheduler = class 24 Tasks: TTasks; 25 end; 39 TSchedulerClass = class of TScheduler; 26 40 27 41 TDrive = class(TNamedObject) … … 34 48 Apps: TNamedObjectList; // TList<TApp> 35 49 Drives: TNamedObjectList; // TList<TDrive> 36 procedure Execute(AFile: TFile); 50 Scheduler: TScheduler; 51 SchedulerClass: TSchedulerClass; 52 FileSystemClass: TFileSystemClass; 53 procedure AppExecute(AFile: TFile); 37 54 procedure Init; 38 55 procedure Run; … … 43 60 implementation 44 61 45 uses 46 UPlatformBase; 62 { TTask } 63 64 constructor TTask.Create; 65 begin 66 67 end; 68 69 { TScheduler } 70 71 procedure TScheduler.Start; 72 begin 73 Running := True; 74 end; 75 76 procedure TScheduler.Stop; 77 begin 78 Running := False; 79 end; 80 81 function TScheduler.AddTask(Name: string; EntryPoint: TEvent): TTask; 82 var 83 NewTask: TTask; 84 begin 85 NewTask := TaskClass.Create; 86 NewTask.Name := Name; 87 NewTask.EntryPoint := EntryPoint; 88 Tasks.Add(NewTask); 89 Result := NewTask; 90 end; 91 92 constructor TScheduler.Create; 93 begin 94 TaskClass := TTask; 95 Tasks := TNamedObjectList.Create; 96 end; 97 98 destructor TScheduler.Destroy; 99 begin 100 if Running then Stop; 101 Tasks.Free; 102 inherited Destroy; 103 end; 47 104 48 105 { TKernel } 49 106 50 procedure TKernel. Execute(AFile: TFile);107 procedure TKernel.AppExecute(AFile: TFile); 51 108 var 52 109 App: TApp; 53 110 begin 54 111 App := TApp(Apps.FindByName(AFile.Name)); 55 if Assigned(App) then App.Run 56 else raise Exception.Create('Application ''' + AFile.Name + ''' no found'); 112 if Assigned(App) then begin 113 Scheduler.AddTask(App.Name, App.Run); 114 end else raise Exception.Create('Application ''' + AFile.Name + ''' no found'); 57 115 end; 58 116 … … 62 120 NewFile: TFile; 63 121 begin 122 Scheduler.Free; 123 Scheduler := SchedulerClass.Create; 124 64 125 NewDrive := TDrive.Create; 65 126 NewDrive.Name := 'System'; 66 NewDrive.FileSystem := TBaseFileSystem.Create;127 NewDrive.FileSystem := FileSystemClass.Create; 67 128 Drives.Add(NewDrive); 68 129 … … 83 144 SystemFileSystem := SystemDrive.FileSystem; 84 145 AppFile := TFile(SystemFileSystem.TopDirectory.Items.FindByName('Clock')); 85 if Assigned(AppFile) then Execute(AppFile)146 if Assigned(AppFile) then AppExecute(AppFile) 86 147 else raise Exception.Create('Cannot start first application'); 148 Scheduler.Start; 87 149 end else raise Exception.Create('Missing System drive'); 88 150 end; … … 92 154 Drives := TNamedObjectList.Create; 93 155 Apps := TNamedObjectList.Create; 156 Scheduler := TScheduler.Create; 94 157 end; 95 158 96 159 destructor TKernel.Destroy; 97 160 begin 161 Scheduler.Free; 98 162 Apps.Free; 99 163 Drives.Free;
Note:
See TracChangeset
for help on using the changeset viewer.