hi,
aus performancegründen möchte ich meine wordscanmethode in einem thread packen! habe folgendes probiert:
<pre>
type
TScanwordsThread = class (TThread)
public
flist1 : string;
flist2 : tstringlist;
constructor create;
procedure execute; override;
procedure init(vlist1 : string; vlist2 : tstringlist);
procedure wordscan(SourceText : string; Results : tStringList);
end;
//Thread
constructor TScanwordsThread.create;
begin
inherited create (True);//nicht false
freeOnTerminate := true; //! //keine Speicherloecher
end;
procedure TScanwordsThread.execute;
begin
wordscan (flist1, flist2);
end;
//init muss vor execute ausgeführt werden
procedure TScanwordsThread.init(vlist1 : string; vlist2 : tstringlist);
begin
flist1 := vlist1;
flist2 := vlist2;
end;
//procedure geht text durch und schreibt einzelne worte in eine liste
procedure TScanwordsThread.wordscan(SourceText : string; Results : tStringList);
var
I, J : integer;
S : String;
begin
Results.sorted := true;
i := 0;
repeat
J := I + 1;
I := FindNextPos (#32, SourceText, j);
s := trim (copy (SourceText, j,i-j));
if s <> '' then
results.add (s);
until (I < 1) or terminated; //!
terminate; //!
end;
//Wörter durchscannen
list1 := memo.lines.text;
for z := 1 to length(list1)-1 do begin
c := list1[z];
if c = #13 then list1[z] := #32
else if c = #10 then list1[z] := #32
else if c = '.' then list1[z] := #32
else if c = '<' then list1[z] := #32
else if c = '>' then list1[z] := #32;
end;
list2 := TStringList.Create;
scanthread := TScanwordsThread.create;
scanthread.init(list1, list2);
scanthread.resume; //so schmeisst man den Thread an
list2.Sort;
list2.Duplicates := dupIgnore;
list2.AddStrings(textvorlagen.ItemList);
textvorlagen.ItemList.Clear;
textvorlagen.ItemList.AddStrings(list2);
list2.Destroy;
</pre>
list2 müßte halt wieder nach "außen" gegeben werden!
klappt aber nicht!
gruß
markus
aus performancegründen möchte ich meine wordscanmethode in einem thread packen! habe folgendes probiert:
<pre>
type
TScanwordsThread = class (TThread)
public
flist1 : string;
flist2 : tstringlist;
constructor create;
procedure execute; override;
procedure init(vlist1 : string; vlist2 : tstringlist);
procedure wordscan(SourceText : string; Results : tStringList);
end;
//Thread
constructor TScanwordsThread.create;
begin
inherited create (True);//nicht false
freeOnTerminate := true; //! //keine Speicherloecher
end;
procedure TScanwordsThread.execute;
begin
wordscan (flist1, flist2);
end;
//init muss vor execute ausgeführt werden
procedure TScanwordsThread.init(vlist1 : string; vlist2 : tstringlist);
begin
flist1 := vlist1;
flist2 := vlist2;
end;
//procedure geht text durch und schreibt einzelne worte in eine liste
procedure TScanwordsThread.wordscan(SourceText : string; Results : tStringList);
var
I, J : integer;
S : String;
begin
Results.sorted := true;
i := 0;
repeat
J := I + 1;
I := FindNextPos (#32, SourceText, j);
s := trim (copy (SourceText, j,i-j));
if s <> '' then
results.add (s);
until (I < 1) or terminated; //!
terminate; //!
end;
//Wörter durchscannen
list1 := memo.lines.text;
for z := 1 to length(list1)-1 do begin
c := list1[z];
if c = #13 then list1[z] := #32
else if c = #10 then list1[z] := #32
else if c = '.' then list1[z] := #32
else if c = '<' then list1[z] := #32
else if c = '>' then list1[z] := #32;
end;
list2 := TStringList.Create;
scanthread := TScanwordsThread.create;
scanthread.init(list1, list2);
scanthread.resume; //so schmeisst man den Thread an
list2.Sort;
list2.Duplicates := dupIgnore;
list2.AddStrings(textvorlagen.ItemList);
textvorlagen.ItemList.Clear;
textvorlagen.ItemList.AddStrings(list2);
list2.Destroy;
</pre>
list2 müßte halt wieder nach "außen" gegeben werden!
klappt aber nicht!
gruß
markus