?? stringqueue.pas
字號:
unit StringQueue;
(*********************************************************************
* The contents of this file are used with permission, subject to *
* the Mozilla Public License Version 1.1 (the "License"); you may *
* not use this file except in compliance with the License. You may *
* obtain a copy of the License at *
* http://www.mozilla.org/MPL/MPL-1.1.html *
* *
* Software distributed under the License is distributed on an *
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or *
* implied. See the License for the specific language governing *
* rights and limitations under the License. *
* *
* (C) 2004 Martin Offenwanger: coder@dsplayer.de *
*********************************************************************)
{
@author(Martin Offenwanger: coder@dsplayer.de)
@created(Apr 22, 2004)
@lastmod(Sep 09, 2004)
}
interface
uses
classes, SyncObjs;
type
TStringQueue = class
public
constructor Create;
destructor Destroy; override;
procedure Push(AItem: string);
function Pop: string;
procedure InsertItem(AItem: string; Pos: integer);
function GetItem(Count: integer): string;
function GetAllItems: TStrings;
function GetCount: integer;
private
FItemlist: TStringlist;
FCriticalSection: TCriticalsection;
end;
implementation
procedure TStringQueue.InsertItem(AItem: string; Pos: integer);
begin
FCriticalSection.Enter;
FItemlist.Insert(Pos, AItem);
FCriticalsection.Leave;
end;
function TStringQueue.GetCount: integer;
begin
FCriticalsection.Enter;
Result := FItemlist.Count;
FCriticalsection.Leave;
end;
function TStringQueue.GetItem(Count: integer): string;
begin
FCriticalsection.Enter;
Result := FItemlist[Count];
FCriticalsection.Leave;
end;
constructor TStringQueue.Create;
begin
inherited Create;
FItemlist := TStringList.Create;
FCriticalsection := TCriticalSection.Create;
end;
destructor TStringQueue.Destroy;
begin
inherited Destroy;
FItemlist.Destroy;
FCriticalsection.Destroy;
end;
function TStringQueue.Pop: string;
begin
FCriticalsection.Enter;
Result := FItemlist[0];
FItemlist.Delete(0);
FCriticalsection.Leave;
end;
procedure TStringQueue.Push(AItem: string);
begin
FCriticalsection.Enter;
FItemlist.Add(AItem);
FCriticalsection.Leave;
end;
function TStringQueue.GetAllItems: TStrings;
begin
FCriticalsection.Enter;
result := FItemlist;
FCriticalsection.Leave;
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -