AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form in neuem Thread laufen lassen

Ein Thema von Hobbycoder · begonnen am 17. Apr 2017 · letzter Beitrag vom 27. Jul 2017
Antwort Antwort
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Form in neuem Thread laufen lassen

  Alt 24. Apr 2017, 11:09
Die Methode TThread.Create(...) rufts du ja im Hauptthread auf. Wo soll das Fenster also anders "laufen" als im Hauptthread?
@Luckie: Yup, klingt natürlich logisch, ich war aber bisher der falschen Meinung, dass es bereits schon im Thread läuft.

Wenn du zum Beispiel eine Methode Test hättest und diese aufrufst, würdest du ja auch nicht erwarten, dass diese in einem anderen Thread läuft. TThread.Create ist auch nur eine normale Methode, die als Konstruktor fungiert. Dementsprechend wird diese auch im Hauptthread bleiben und ausgeführt werden, wenn du diese im Hauptthread aufrufst.

Execute rufst du nicht selbst auf, sondern wird intern aus dem neuen Thread heraus aufgerufen. Deshalb ist das nicht mehr im Kontext des Hauptthreads.

Übrigens siehst du in der Liste der Threads im Debugger auch in welchem du dich gerade befindest, wenn du gerade debuggst.

Ich werde dann einmal ein Repository vorbereiten und die Units dort zur Verfügung stellen inkl. Demo. Im Anhang mal die Demo... (das Hauptfenster ist VCL, die Threadfenster nicht)
Deren Quelltext sieht so aus:
Delphi-Quellcode:
  TThread.CreateAnonymousThread(procedure
    var
      ExampleDialog: TNonVclDialog;
      ExampleControl: TNonVclEdit;
      i, j: Integer;
    begin
      TThread.NameThreadForDebugging('Testtext');
      ExampleDialog := TNonVclDialog.Create(1901);
      try
        ExampleDialog.Show;
        ExampleControl := ExampleDialog.Get<TNonVclEdit>(4001);
        ExampleDialog.Get<TNonVclButton>(IDOK).OnClick := DialogButtonClick;
        for i := 0 to 10 do
        begin
          for j := 0 to 10 do
          begin
            ExampleControl.Text := ExampleControl.Text + 'abc';
            Sleep(100);
          end;
          ExampleControl.Text := ExampleControl.Text + 'abc'#13#10;
        end;
      finally
        ExampleDialog.Free;
      end;
    end).Start;
Beim Beenden knallt die Demo, wenn noch Threadfenster offen sind. Das liegt daran, dass ich aktuell die Threads vor dem Beenden nicht beende, das werde ich noch sauber machen.
@jaenicke: auf den Code bin ich schon sehr gespannt, vielen Dank mal im Voraus!

lg,
jus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz