--- /dev/null
+unit BottleSstp;
+
+interface
+
+uses Classes, Contnrs, SyncObjs, Windows, Logs;
+
+type
+
+ TBottleSstp = class(TThread)
+ private
+ FCueLock: TCriticalSection;
+ FCue: TObjectList; // \83X\83\8c\83b\83h\83Z\81[\83t\82É\82È\82é\82æ\82¤\82É\92\8d\88Ó
+ public
+ constructor Create(CreateSuspended: boolean);
+ destructor Destroy; override;
+ procedure Push(Bottle: TLogItem);
+ procedure Unshift(Bottle: TLogItem);
+ procedure Execute; override;
+ end;
+
+implementation
+
+{ TBottleSstp }
+
+constructor TBottleSstp.Create(CreateSuspended: boolean);
+begin
+ inherited;
+ FCueLock := TCriticalSection.Create;
+ FCue := TObjectList.Create(true);
+end;
+
+destructor TBottleSstp.Destroy;
+begin
+ FCue.Free;
+ FCueLock.Free;
+ inherited;
+end;
+
+procedure TBottleSstp.Execute;
+begin
+ inherited;
+ while not Terminated do begin
+ sleep(2);
+ end;
+end;
+
+procedure TBottleSstp.Push(Bottle: TLogItem);
+var Item: TLogItem;
+begin
+ Item := TLogItem.Create(Bottle);
+ FCueLock.Enter;
+ try
+ FCue.Add(Item);
+ finally
+ FCueLock.Leave;
+ end;
+end;
+
+procedure TBottleSstp.Unshift(Bottle: TLogItem);
+var Item: TLogItem;
+begin
+ Item := TLogItem.Create(Bottle);
+ FCueLock.Enter;
+ try
+ FCue.Insert(0, Item);
+ finally
+ FCueLock.Leave;
+ end;
+end;
+
+end.