Ignore:
Timestamp:
Aug 29, 2016, 5:17:45 PM (8 years ago)
Author:
chronos
Message:
  • Fixed: Removed duplicit files moved previously to Kernel package.
Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:ignore
      •  

        old new  
        33lib
        44heaptrclog.trc
         5ChronOS.exe
  • trunk/Packages/Kernel

    • Property svn:ignore set to
      lib
  • trunk/Packages/Kernel/UKernel.pas

    r8 r9  
    66
    77uses
    8   Classes, Math, SysUtils, UList, Contnrs, UFileSystem, UMemory, UScreen, UDevice;
     8  Classes, Math, SysUtils, UList, Contnrs, UFileSystem, UMemory, UScreen, UDevice,
     9  fgl, UApp, UScheduler;
    910
    1011type
    11   TTask = class;
    12   TScheduler = class;
    13 
    14   TTaskEvent = procedure(Task: TTask) of object;
    15 
    16   TTaskState = (tsStopped, tsRunning, tsSuspended, tsWaiting);
    17 
    18   TIPCMessage = class
    19     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 = class
    47     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 
    6112  { TDrive }
    6213
     
    7728    procedure InitVideo;
    7829  public
    79     Apps: TNamedObjectList; // TList<TApp>
    80     Drives: TNamedObjectList; // TList<TDrive>
     30    Apps: TNamedObjectList<TApp>;
     31    Drives: TNamedObjectList<TDrive>;
    8132    Scheduler: TScheduler;
    8233    SchedulerClass: TSchedulerClass;
    8334    FileSystemClass: TFileSystemClass;
    84     Devices: TNamedObjectList; // TList<TDevice>
    85     Screens: TObjectList; // TList<TScreen>
     35    Devices: TNamedObjectList<TDevice>;
     36    Screens: TFPGObjectList<TScreen>;
    8637    procedure AppExecute(AFile: TFile);
    8738    procedure Init;
     
    9243
    9344implementation
    94 
    95 uses
    96   UApp;
    9745
    9846
     
    10755begin
    10856  FileSystem.Free;
    109   inherited Destroy;
    110 end;
    111 
    112 { TTask }
    113 
    114 procedure TTask.WaitForMessage;
    115 begin
    116   WaitReason := wrMessage;
    117   State := tsWaiting;
    118   Scheduler.SwitchNext;
    119 end;
    120 
    121 procedure TTask.Sleep(Duration: TDateTime);
    122 begin
    123   WakeUpTime := Now + Duration;
    124   State := tsWaiting;
    125   WaitReason := wrSleep;
    126   Scheduler.SwitchNext;
    127 end;
    128 
    129 constructor TTask.Create;
    130 begin
    131   Messages := TObjectQueue.Create;
    132 end;
    133 
    134 destructor TTask.Destroy;
    135 begin
    136   Messages.Free;
    137   inherited Destroy;
    138 end;
    139 
    140 { TScheduler }
    141 
    142 function TScheduler.GetCurrentTask: TTask;
    143 begin
    144   Result := nil;
    145 end;
    146 
    147 procedure TScheduler.Start;
    148 begin
    149   Running := True;
    150 end;
    151 
    152 procedure TScheduler.Stop;
    153 begin
    154   Running := False;
    155 end;
    156 
    157 function TScheduler.AddTask(Name: string; EntryPoint: TTaskEvent): TTask;
    158 var
    159   NewTask: TTask;
    160 begin
    161   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 begin
    171 
    172 end;
    173 
    174 constructor TScheduler.Create;
    175 begin
    176   TaskClass := TTask;
    177   Tasks := TNamedObjectList.Create;
    178 end;
    179 
    180 destructor TScheduler.Destroy;
    181 begin
    182   if Running then Stop;
    183   Tasks.Free;
    18457  inherited Destroy;
    18558end;
     
    264137constructor TKernel.Create;
    265138begin
    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;
    269142  Scheduler := TScheduler.Create;
    270   Screens := TObjectList.Create;
     143  Screens := TFPGObjectList<TScreen>.Create;
    271144end;
    272145
Note: See TracChangeset for help on using the changeset viewer.