Worker thread

This commit is contained in:
AlekXL
2019-04-13 14:18:08 +03:00
parent ea85f9f607
commit df3d508d1d
9 changed files with 2194 additions and 1133 deletions

74
Demo/Demo.dpr Normal file
View File

@@ -0,0 +1,74 @@
program Demo;
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
{$APPTYPE CONSOLE}
{$R *.res}
uses
{$IF not defined(FPC)}
FastMM4,
{$endif}
SysUtils,
Classes,
AG.PascalTokenizer in '../AG.PascalTokenizer.pas';
procedure Test(sList:TStrings; toStream:TStream; sync: boolean);
var tokenStack: TAGPasTokenizerStack;
s:UnicodeString;
begin
tokenStack := nil;
try
if sync then
tokenStack := TAGPasTokenizerStack.Create(sList)
else
tokenStack:= TAGPasTokenizerParallelStack.Create(sList);
while not tokenStack.ended do begin
s := tokenStack.Pop.Text+#10;
toStream.Write(Pointer(s)^, Length(s)*2);
end;
finally
FreeAndNil(tokenStack);
end;
end;
var start: Cardinal;
sList: TStringList;
sw:TFileStream;
begin
TObject.Create();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try
sList := TStringList.Create();
try
sList.LoadFromFile('c:\prosoft\RIO\source\rtl\common\System.Classes.pas');
sw:=TFileStream.Create('tokens1.txt', fmCreate or fmOpenWrite);
start := TThread.GetTickCount;
Test(sList,sw, true);
start := TThread.GetTickCount - start;
Writeln('Sync Done in ', start, ' ms');
sw.Free;
sw:=TFileStream.Create('tokens2.txt', fmCreate or fmOpenWrite);
start := TThread.GetTickCount;
Test(sList,sw, false);
start := TThread.GetTickCount - start;
sw.Free;
Writeln('Sync Done in ', start, ' ms');
finally
sList.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.