Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Threads und Zugreifen auf Controls

  Alt 28. Dez 2005, 17:15
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.
  Mit Zitat antworten Zitat