Announcement

Collapse
No announcement yet.

wordscan im thread

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wordscan im thread

    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
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign
Working...
X