AGB  ·  Datenschutz  ·  Impressum  







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

Weak-TList ?

Ein Thema von himitsu · begonnen am 25. Feb 2015 · letzter Beitrag vom 11. Mär 2015
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Weak-TList ?

  Alt 26. Feb 2015, 10:03
Im ARC wollte ich mal versuchen das möglichst alles "nativ" zu belassen.
Was hat das mit "nativ" zu tun?

Hier mal ein Beispiel, wo so eine WeakRef-Record für ARC sinnvoll verwendet werden kann:
Delphi-Quellcode:
function Foo( const ABitmap : TBitmap ):ITask;
var
  LBitmapRef: WeakRef<TBitmap>;
begin
  // WeakRef auf Bitmap
  LBitmapRef := ABitmap;
  Result := TTask.Create(
    procedure
    var
      LBitmap : TBitmap;
    begin
      // StrongRef auf Bitmap, damit die bis zum Ende des Tasks überlebt, wenn es die noch gibt :o)
      LBitmap := LBitmapRef;
      // Wenn Bitmap schon weg ist, dann raus hier
      if not Assigned( LBitmap ) then Exit;
      // Now work on Bitmap
      
    end );
end;
Du erzeugst also einen Task, der irgendwann gestartet werden soll. Die übergebene Bitmap kann aber bis zum echten Start schon wieder verschwunden sein. Ist die Bitmap beim Starten aber nicht verschwunden, dann wird im Task wieder eine Strong-Ref auf Bitmap gemacht und schon lebt die Referenz bis zum Ende des Tasks.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (26. Feb 2015 um 10:05 Uhr)
  Mit Zitat antworten Zitat
 


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 17:48 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