Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Benachrichtigung im Haupt-Thread über Thread-Ende? (https://www.delphipraxis.net/212370-benachrichtigung-im-haupt-thread-ueber-thread-ende.html)

PeterPanino 31. Jan 2023 16:49

Delphi-Version: 11 Alexandria

Benachrichtigung im Haupt-Thread über Thread-Ende?
 
Ich starte einen Neben-Thread mit:

Delphi-Quellcode:
  LThread := TThread.CreateAnonymousThread(
    procedure
    begin
      // Tu etwas
    end;
Wie kann ich im Haupt-Thread benachrichtigt werden, wenn der LThread beendet ist?

Uwe Raabe 31. Jan 2023 17:02

AW: Benachrichtigung im Haupt-Thread über Thread-Ende?
 
Du kannst dem OnTerminate des Threads eine entsprechende Methode zuweisen.

https://docwiki.embarcadero.com/Libr...ad.OnTerminate

himitsu 31. Jan 2023 17:18

AW: Benachrichtigung im Haupt-Thread über Thread-Ende?
 
Oder z.B. mit try-finally, in der Prozedur, am Ende deine Rückantwort.



PS, bei dir kommt dort nie eine Antwort, falls da nicht nicht noch ein Start kommt.

Delphi-Quellcode:
LThread := TThread.CreateAnonymousThread(
  procedure
  begin
    // Tu etwas
  end);
LThread.OnTerminate := BinFertigEreignis;
LThread.Start;
Delphi-Quellcode:
TThread.CreateAnonymousThread(
  procedure
  begin
    try
      // Tu etwas
    finally
      BinFertigEreignis;
    end
  end).Start;

Delphi-Quellcode:
LThread := TThread.CreateAnonymousThread(
  procedure
  begin
    // Tu etwas
  end);
LThread.FreeOnTerminate := False;
LThread.Start;

// und dann kannst du nachfolgend
if LThread.Finished then // oder .WaitFor oder was mit .Handle

// und natürlich zum Schluß LThread.Free nicht vergessen

PeterPanino 31. Jan 2023 20:34

AW: Benachrichtigung im Haupt-Thread über Thread-Ende?
 
Zitat:

Zitat von himitsu (Beitrag 1518110)
Oder z.B. mit try-finally, in der Prozedur, am Ende deine Rückantwort.



PS, bei dir kommt dort nie eine Antwort, falls da nicht nicht noch ein Start kommt.

Delphi-Quellcode:
LThread := TThread.CreateAnonymousThread(
  procedure
  begin
    // Tu etwas
  end);
LThread.OnTerminate := BinFertigEreignis;
LThread.Start;
Delphi-Quellcode:
TThread.CreateAnonymousThread(
  procedure
  begin
    try
      // Tu etwas
    finally
      BinFertigEreignis;
    end
  end).Start;

Delphi-Quellcode:
LThread := TThread.CreateAnonymousThread(
  procedure
  begin
    // Tu etwas
  end);
LThread.FreeOnTerminate := False;
LThread.Start;

// und dann kannst du nachfolgend
if LThread.Finished then // oder .WaitFor oder was mit .Handle

// und natürlich zum Schluß LThread.Free nicht vergessen

Danke - das ist sehr hilfreich!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz