📄 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -