Threads und Rückgabewerte [erledigt]
Moderator: Moderatoren
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Threads und Rückgabewerte [erledigt]
Hallo an alle,
ist es möglich, von einem Thread einen Rückgabewert zu erhalten (z.B. .T./.F.) ?
Ich dachte, ich könnte beim Thread:start("Meine_Funktion", aM, cM, lM, @retw) auch ein Parameter per Referenz übergeben, und aus dem Thread retw beschreiben, aber das klappt irgendwie nicht.
ist es möglich, von einem Thread einen Rückgabewert zu erhalten (z.B. .T./.F.) ?
Ich dachte, ich könnte beim Thread:start("Meine_Funktion", aM, cM, lM, @retw) auch ein Parameter per Referenz übergeben, und aus dem Thread retw beschreiben, aber das klappt irgendwie nicht.
Viele Grüße
Wolfgang
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Threads und Rückgabewerte
Hallo, Wolfgang -
der Thread läuft unabhängig von Deiner startenden Funktion, und letztere "wartet" ja auch nicht auf den Thread.
Du kannst aber aus dem Thread heraus eine Nachricht an einen anderen Thread schicken. Du benötigst ein Objekt aus einem anderen Thread als "Anker", an den Du eine Notification schickst.
Wenn ich aus einem Browse einen Datensatz bearbeite, passiert das bei mir in einem separaten Thread. Wenn die Bearbeitung des Datensatzes beendet ist, wird eine Nachricht an den Event-Loop des Browse gesendet, damit dieser sich aktualisieren kann. Da sieht etwa so aus:
Da oBro sich in einem anderen Thread befindet, schlägt das Event dort auf. xbeP_User_notify ist übrigens selbst definiert, d.h. es findet sich nicht in AppEvent.ch.
Im Event-Loop des Browse steht dann unter anderem
Vielleicht hilft Dir das ja, eine für Deine Anforderung adäquate Lösung zu erstellen.
der Thread läuft unabhängig von Deiner startenden Funktion, und letztere "wartet" ja auch nicht auf den Thread.
Du kannst aber aus dem Thread heraus eine Nachricht an einen anderen Thread schicken. Du benötigst ein Objekt aus einem anderen Thread als "Anker", an den Du eine Notification schickst.
Wenn ich aus einem Browse einen Datensatz bearbeite, passiert das bei mir in einem separaten Thread. Wenn die Bearbeitung des Datensatzes beendet ist, wird eine Nachricht an den Event-Loop des Browse gesendet, damit dieser sich aktualisieren kann. Da sieht etwa so aus:
Code: Alles auswählen
oThread:start("MeinEditWindow", p1, p2, p3, p4, oBro)
...
PostAppEvent(xbeP_User_notify, aP1, nP2, oBro)
Im Event-Loop des Browse steht dann unter anderem
Code: Alles auswählen
CASE nEvent == xbeP_User_notify
... // Aktualisieren des Browse
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Threads und Rückgabewerte
und du kannst einen local Parameter per Referenz übergeben.
Dieser Wert kann dann laufend einen Wert oder Status austauschen (von beiden Seiten zugreifbar)
Dieser Wert kann dann laufend einen Wert oder Status austauschen (von beiden Seiten zugreifbar)
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 07. Aug 2006 10:18
- Wohnort: Leipzig
- Danksagung erhalten: 11 Mal
Re: Threads und Rückgabewerte
Hallo Wolfgang,
falls du den Rückgabewert deiner Funktion erst zu dem Zeitpunkt benötigst,
wenn der Thread beendet ist, könnte die iVar :result für dich interessant sein.
falls du den Rückgabewert deiner Funktion erst zu dem Zeitpunkt benötigst,
wenn der Thread beendet ist, könnte die iVar :result für dich interessant sein.
Code: Alles auswählen
oThread:start( "Meine_Funktion" )
oThread:synchronize(0)
xResult := oThread:result
Beste Grüße,
Sören
Sören
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Threads und Rückgabewerte
@Georg,
danke, das mit den Events benutze ich schon.
@Hubert
In diesem speziellen Fall will ich auf die Beendigung des Threads warten:
retw ergibt immer .T., obwohl ich in IntMailSenden retw mit .F. beschreibe.
danke, das mit den Events benutze ich schon.
@Hubert
In diesem speziellen Fall will ich auf die Beendigung des Threads warten:
Code: Alles auswählen
oThread:start("IntMailSenden", aMails, cMailart, lVorschau, @retw)
DO WHILE .NOT. oThread:synchronize(1)
sleep(10)
ENDDO
if retw
...
endif
Viele Grüße
Wolfgang
Wolfgang
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Threads und Rückgabewerte
Schau dir mal das Xbase++ Beispiel K:\XPPW32\source\samples\basics\THREAD\coffee.exe an.
Dort wird die Menge an Kaffee und Wartezustände zwischen den Threads ausgetauscht.
Ich selbst nutze die Parameterübergabe eigentlich nur um einen gewünschten Abbruch im zweiten Thread zu erkennen.
Ich dachte es geht mit der LOCAL per Referenz, aber eventuell braucht man doch eine STATIC / Funktion oder PRIVATE ?
Eleganter geht es im COFFEE Beispiel.
Dort wird die Menge an Kaffee und Wartezustände zwischen den Threads ausgetauscht.
Ich selbst nutze die Parameterübergabe eigentlich nur um einen gewünschten Abbruch im zweiten Thread zu erkennen.
Ich dachte es geht mit der LOCAL per Referenz, aber eventuell braucht man doch eine STATIC / Funktion oder PRIVATE ?
Eleganter geht es im COFFEE Beispiel.
Gruß
Hubert
Hubert
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Threads und Rückgabewerte
Habe das jetzt mit einer static variablen gelöst.
Viele Grüße
Wolfgang
Wolfgang