Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: VCL (C++ Builder) ::  TThread - Queue mit Anonymer Methode -> CBuilder-Entsprechung?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
F.Koch
Unregistrierter




Beitrag F.Koch Unregistrierter 14:22:25 29.03.2012   Titel:   TThread - Queue mit Anonymer Methode -> CBuilder-Entsprechung?            Zitieren

Hallo zusammen.

Seit dem 2009er-Release des C++ Builders gibt es ja für Synchronize und Queue in TThread die Überladung
_di_TThreadProcedure AThreadProc,
die anonyme Methoden einsetzt.

Ich möchte diese nutzen, um per Queue Daten aus einem Thread an den VCL-Thread zur Anzeige zu übergeben, um keine Critical Sections nutzen zu müssen.
Für Object Pascal gibt es hierzu einige Beispiele, z.B.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TSortThread.VisualSwap(A, B, I, J: Integer);
begin
  Synchronize(procedure
   begin
     with FBox do
     begin
       Canvas.Pen.Color := clBtnFace;
       PaintLine(Canvas, I, A);
       PaintLine(Canvas, J, B);
       Canvas.Pen.Color := clRed;
       PaintLine(Canvas, I, B);
       PaintLine(Canvas, J, A);
     end;
   end);
end;

auf http://blogs.embarcadero.com/abauer/2008/09/08/38868

oder auf der Delphi-Seite von Uwe Raabe
http://www.uweraabe.de/Blog/2011/01/30/synchronize-and-queue-with-parameters/

Leider werde ich nicht ganz schlau draus, wie ich das ganze im C++ Builder (XE2) umsetzen kann und habe leider auch noch keine Beispiele gefunden. Gibt es hier die Entsprechung für anonyme Methoden?

Hat eventuell jemand ein Quellcode-Beispiel für die Übergabe von Werten an den VCL-Thread mit anonymen Methoden und der Queue-Methode für C++?

Gruß,
F. Koch
audacia
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.02.2005
Beiträge: 4140
Beitrag audacia Mitglied 18:38:32 30.03.2012   Titel:              Zitieren

Anonyme Methoden gibt es in C++ nicht, und das Analogon Lambda-Expressions unterstützt der C++Builder noch nicht. Aber du kannst dir trotzdem ähnlich komfortabel abhelfen, indem du nämlich von der Klasse TCppThread erbst, die ich hier gepostet habe. Dann hast du eine Methode namens SynchronizeCall(), der du die aufzurufende Funktion und die Argumente übergeben kannst. Die Funktion führt dann Synchronize() aus, ruft im Hauptthread deine Funktion auf, speichert ggf. den Rückgabewert und gibt in an den Aufrufer weiter.

Ein Beispiel dazu findest du im verlinkten Post.

Edit: ich vergaß zu erwähnen, daß mein Code nur SynchronizeCall() enthält - aber du kannst völlig analog dazu auch ein QueuedCall() implementieren. Vielleicht erweitere ich den Code auch mal gelegentlich selbst.

_________________
"Hey, it compiles! Ship it!"
C++Builder Pages · Typsichere Format-Strings


Zuletzt bearbeitet von audacia am 18:42:27 30.03.2012, insgesamt 1-mal bearbeitet
F. Koch
Unregistrierter




Beitrag F. Koch Unregistrierter 13:14:06 03.04.2012   Titel:              Zitieren

Vielen Dank für die Antwort.
Hat mir sehr weitergeholfen. :)
c++.de :: VCL (C++ Builder) ::  TThread - Queue mit Anonymer Methode -> CBuilder-Entsprechung?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.