Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Synchronize mit Argumenten (https://www.delphipraxis.net/158203-synchronize-mit-argumenten.html)

himitsu 21. Feb 2011 10:25

AW: Synchronize mit Argumenten
 
Nur um es mal erwähnt zu haben:
Delphi-Quellcode:
var S: String;

begin
  ...
  S := 'Hallo';
  TThread.Synchronize(nil,
    procedure
    begin
      Memo1.Lines.Add(S);
    end);
  ...
end;
PS: Ein Delphi/RAD 2009/2010/XE ist dafür schon nötig.

Rob09 10. Aug 2011 17:45

AW: Synchronize mit Argumenten
 
Sir Rufo hat folgendes vorgeschlagen (Beitrag #4):

Zitat:

Delphi-Quellcode:
procedure TMyOwnThread.CallError( const Content : string );
procedure SyncError;
begin
  if Assigned( FInstError )
    then FInstError( Content );
end;
begin
  Synchronize( SyncError );
end;

Bei mir meckert der Compiler da aber in der Synchronize(...)-Zeile: "Incompatible types: 'method pointer and regular procedure'". Jemand ne Ahnung, woran das liegen könnte? Delphi 6?

Gruß!
Robert

Luckie 10. Aug 2011 17:51

AW: Synchronize mit Argumenten
 
Guck dir doch mal die beiden ersten Zeilen von deinem Code an. Fällt dir da nichts auf? :roll:

Rob09 10. Aug 2011 17:55

AW: Synchronize mit Argumenten
 
:wiejetzt:

Eigentlich nicht... Prozedur innerhalb Prozedur geht doch, oder? :?:

Rob09 10. Aug 2011 17:56

AW: Synchronize mit Argumenten
 
Ah, du meinst, das Problem ist, dass SyncError nicht mehr "procedure of object" ist?

geskill 10. Aug 2011 17:58

AW: Synchronize mit Argumenten
 
Ne, SyncError muss eine Klassenmethode sein ;)

Rob09 10. Aug 2011 18:01

AW: Synchronize mit Argumenten
 
Okay... :gruebel:

Eine Sub-Prozedur kann aber prinzipiell keine Klassenmethode sein, oder? D.h. wie wäre dann überhaupt Sir Rufos Vorschlag zu realisieren? Und wieso hatte damit noch niemand vor mir ein Problem???

sirius 10. Aug 2011 18:13

AW: Synchronize mit Argumenten
 
Zitat:

Zitat von Rob09 (Beitrag 1116075)
Okay... :gruebel:

Eine Sub-Prozedur kann aber prinzipiell keine Klassenmethode sein, oder? D.h. wie wäre dann überhaupt Sir Rufos Vorschlag zu realisieren? Und wieso hatte damit noch niemand vor mir ein Problem???

Dann lies mal bis Beitrag #10!

Rob09 10. Aug 2011 18:18

AW: Synchronize mit Argumenten
 
Boah, heute hab ich wirklich Tomaten auf den Augen :freak: :oops:

Danke für den Hinweis, hatte ich einfach übersehen.

Beste Grüße!
Robert

himitsu 10. Aug 2011 18:28

AW: Synchronize mit Argumenten
 
Zitat:

Zitat von geskill (Beitrag 1116073)
Ne, SyncError muss eine Klassenmethode sein ;)

Jupp, original mußte es so sein, aber seit den Generics gibt es ein zweites Synchronize, welches Prozeduren, Methoden, diese komischen Inline-Prozeduren (innerhalb einer anderen Prozedur/Methode, deren Name ich ständig vergesse) oder gar anonyme Methoden entgegennimmt.

Da kann man dann auch so kranke Sachen machen, wie eben dieses
Delphi-Quellcode:
var
  X: String;
begin
  X := 'Hallo Welt!';
  Synchronize(procedure
    begin
      ShowMessage(X);
    end);
end;
Geht aber erst seit D2009/D2010.
Aus einer TThread-Methode heraus und das in #41 geht überall.

Wenn man etwas nur an dieser Stelle synchronisieren will, dann finde ich es so viel übersichtlicher, da der Code dort steht, wo er aufgerufen wird.
Wird genügend Code an mehreren Stellen aufgerufen, dann natürlich immernoch die getrennte Methode,
wobei man in diesem Synchronize-Bereich auch eine Methode, mit Parametern, aufrufen kann. :angle2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Seite 5 von 5   « Erste     345   

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