📄 uglobalobj.pas
字号:
unit uGlobalObj;
interface
uses Classes,uPort, uCar, uLight, Contnrs, SysUtils, ExtCtrls,
uThreadComList, Dialogs, Controls, Types;
const
SCANINTERVAL = 1000;
var
GCarList: TThreadComList;
GLightList: TComponentList;
GPortList: TComponentList;
type
TCarMgr = class
private
FTimer: TTimer;
procedure FOnTimer(Sender: TObject);
procedure ScanInsected(ACar: TCar);
public
constructor Create;
destructor Destroy;override;
procedure RemoveCar(ACar: TCar);
//procedure AddCar(ACar: TCar);
end;
implementation
constructor TCarMgr.Create;
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := SCANINTERVAL;
FTimer.Enabled := true;
FTimer.OnTimer := FOnTimer;
end;
destructor TCarMgr.Destroy;
begin
FreeAndNil(FTimer);
end;
procedure TCarMgr.ScanInsected(ACar: TCar);
var
n, i: integer;
LLight: TLight;
begin
n := GLightList.Count - 1;
for i := 0 to n do
begin
LLight := GLightList.Items[i] as TLight;
if ACar.HasInsected(LLight) and (not ACar.HasAckInsected) then
begin
if LLight.State=lsRed then
ACar.Stop
else if LLight.State=lsGreen then
ACar.GoForward
else if LLight.State=lsLeft then
ACar.TurnLeft
else if LLight.State=lsRight then
ACar.TurnRight;
ACar.HasAckInsected := true; { TODO : chagehasak }
end
else
ACar.HasAckInsected := false;
end;
n := GPortList.Count - 1;
for i := 0 to n do
begin
if ACar.IsToPort(GPortList.Items[i] as TPort) then
;//ShowMessage('');//RemoveCar(ACar); { TODO : 此处有问题 }
end;
end;
procedure TCarMgr.FOnTimer(Sender: TObject);
var
n, i: integer;
LCar: TCar;
LCarList: TList;
begin
LCarList := GCarList.LockList;
n := LCarList.Count - 1;
for i := 0 to n do
begin
LCar := (TCar(LCarList.Items[i]) as TCar);
ScanInsected(LCar);
LCar.Move;
end;
GCarList.UnlockList;
end;
procedure TCarMgr.RemoveCar(ACar: TCar);
begin
GCarList.LockList;
GCarList.Remove(ACar);
GCarList.UnlockList;
FreeAndNil(ACar); { TODO : 问题 }
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -