Hallo,
vorweg: Ich kenne dein Tutorial Luckie, nur möchte ich vorerst die Thread-Klasse der
VCL nutzen, da das jetzt für mich übersichtlicher ist (es ist meien erste Anwendung, wo ich Threads verwende).
So, nun zu meinem Problem:
Ich parse einen Text im OnKeyDown eines Memos, was bei langem Text etwas dauern kann (1-2 Sek. vielleicht). Löse ich das ohne Thread, kann man logischerweise kaum tippen, daher dachte ich, ich lager das in einen extra Thread aus.
Den Thread möchte ich so in der Art aufrfen:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
if myMemo <> nil then
begin
CalculateQuickbarArray;
Synchronize(ParseQuickBar);
end;
end;
CalculateQuickbarArray:
Delphi-Quellcode:
procedure TMyThread.CalculateQuickbarArray;
begin
SetLength(RegExArray, 0);
ParseRegExpr(myMemo.Text, 'blubb', 4);
(ParseQuickBar gibt ein im CalculateQuickbarArray befülltes Array aus.)
Dass es so falsch ist, ist mir klar, da ich zwei mal außerhalb von
Synchronize auf ein
VCL Objekt zugreifen möchte. Einmal beim Vergleich, ob es existiert und einmal bei der Parameterübergabe.
Nur wenn ich das über Synchronize mache, friert meine Anwendung beim Ausführen des Threads ein, da ja alles Synchronosiert ist.
Wie umgehe ich das Problem?
Seltsam ist auch, dass das Execute-Ereignis ausgelöst wird, wenn ich besagten Thread mittels
myThread := TmyThread.Create(true);
starte. Eigentlich müsste der Thread ja nun pausiert sein.
Btw: Im OnKeyDown ist mein Code folgender:
myThread.Execute
Wahrscheinlich mache ich alles falsch, was man nur falsch machen kann.