| Autor |
Nachricht |
F.Koch
Unregistrierter
|
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
|
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
|
F. Koch Unregistrierter
13:14:06 03.04.2012 Titel: |
|
Zitieren |
Vielen Dank für die Antwort.
Hat mir sehr weitergeholfen. |
|
|
|
 |
|
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.
|
|
|
|
|