![]() |
Eine eigene Klasse automatisch freigeben
In meinem letzten Programm/Spiel (
![]()
Delphi-Quellcode:
Der Aufruf erfolgt zB. so:
type
TPlaySndThread = class(TThread) private FSound: TSound; protected procedure Execute; override; public constructor Create(aSnd: TSound); end; //... constructor TPlaySndThread.Create(aSnd: TSound); begin inherited Create(True); { Create thread } FreeOnTerminate := True; { Fire and forget } Priority := tpNormal; { Normal Priority } FSound := aSnd; { Params } Resume; { Start the thread } end; procedure TPlaySndThread.Execute; var i: Integer; begin i := 0; while (not Terminated) and (i < FSound.length) do begin if FSound.Tone[i].F > 0 then Windows.Beep(FSound.Tone[i].F, FSound.Tone[i].D) else Sleep(FSound.Tone[i].D); inc(i); end; end;
Delphi-Quellcode:
In der OH steht geschrieben das ein Thread mit FreeOnTerminate := True; automatisch freigegeben wird. Verstehen tu ich die Sache nicht so recht, kann mir das einer erklären was FreeOnTerminate macht, also programiertechnisch wurde das auch gern mal in einer Komponente selbst machen. Also das automatische freigeben.
begin
PlaySndThread := TPlaySndThread.Create(sndWinn); end; Mir fehlt da ein Ansatz. //Edit: Titel korrigiert |
Re: Muss ein Thread
FreeOnTerminate räumt den Speicher von deinem Thread-Objekt wieder auf.
Entspricht..
Delphi-Quellcode:
sl := TStringList.Create
sl.Free; // <-- ..dem hier |
Re: Muss ein Thread
Hm, ja. Noch mal anders gefragt...
Ich maue mir einen neuen Typ:
Code:
Wenn ich im Create Destroy/Free aufrufe kracht es, wenn ich eine Hilfsprocedure dazuschreibe, sagen wir mal Close und im Close rufe ich Free auf kommt auch ein Fehler. :gruebel:
TDings = Class...
constructor Create destrucktor Destroy end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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