AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi THREADS: Benutzung von "TThread.ReturnValue"
Thema durchsuchen
Ansicht
Themen-Optionen

THREADS: Benutzung von "TThread.ReturnValue"

Ein Thema von APP · begonnen am 8. Apr 2003 · letzter Beitrag vom 5. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#1

THREADS: Benutzung von "TThread.ReturnValue"

  Alt 8. Apr 2003, 10:11
Hallo,

ich suche ein Beispiel für die Benutzung von "TThread.ReturnValue",
darf man lt. Hilfe dieses Property frei benutzen

Zitat:
Specifies the value returned to other waiting threads when the thread finishes executing.

Delphi syntax:

property ReturnValue: Integer
...
Description

Use ReturnValue to indicate success/failure or numeric result/output of the thread to the application or other threads. The WaitFor method returns the value stored in ReturnValue.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Aug 2003, 10:15
Genau an diesem Problem sitze ich auch gerade !
Laur Delphi-Hilfe soll die Methode waitfor, auf das ende eines Threads warten und den Wert von ReturnValue zurück geben, eigentlich genau was ich brauche.

Aber es funktioniert leider nicht !
Wann muß der Wert für ReturnValue innerhalb des Threads gesetzt werden ?
Ich mache das im Moment im Ereigniss OnTerminate, hab's aber auch schon am Ende von Execute gemacht; beides kein Erfolg !

Im Moment mache das ganze quick and dirty !
Habe mir ne global zugängliche Longint Variable in der Threadunit erstellt, schreibe da das Ergebnis rein und lese es vom Hauptthread nachdem ich waitfor des threads aufgerufen habe wieder aus.
Aber das kann's doch nicht sein, oder ?
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:05
und ich suche auch ein Bsp. wie man returnvalue und wait for benutzt.
Die Delphi Hilfe bietet da ja überhaupt nichts.

Hmm... sehe dass das ja nur mit Verbindung von threads geht. Da ich davon null plan habe brauche ich nun doch nicht mehr wissen wie return/waitfor funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:23
Hi Leute,

ich habe das Problem jetzt folgender Massen gelöst :

Erstmal habe ich mir eine seperate Klasse ThreadResult erstellt(s. Code) :

Code:
unit ThreadResult;

interface

uses Classes;

type

   TThreadResult = class
      private
         fStr : String;
         fInt : Longint;
         fOk : Boolean;
      protected
         {}
      public
         Constructor Create;
         property StrRes : String read fStr write fStr;
         property IntRes : Longint read fInt write fInt;
         property Ok    : Boolean read fOk write fOk;
   end;

implementation

constructor TThreadResult.Create;
begin
   inherited;
   fStr := '';
   fInt := -100;
   fOk := false;
end;

end.
So, vorm starten eines Threads erzeuge ich eine Instanz dieser Klasse und übergebe diese mit in den Thread.
Da die Instanz dieser Klasse nicht vom Thread erzeugt wird, wird der Speicherbereich auch nicht nach Ende des Threads freigegeben.
An den Thread wird ja nur ein Zeiger auf die Klasse übergeben, so kann der Thread die Werte der Klase ändern, aber die Klase wird nicht bei Beendigung des Threads zerstört.
Siehe folgendes Beispiel :

Code:
function ThreadBsp : Boolean;
Var
   myThd  : TmyThread;
   ThdRes : TThreadResult;
begin
   // Speicher-KLasse für THread-ERgebnis erzeugen
   ThdRes := TThreadResult.Create;
   try
      // Thread erzeugen, wird aber noch nicht gestartet
      myThd := TmyThread.Create(ThdRes);
      // Thread starten
      myThd.Resume;
      // auf Ende des Threads warten
      myThd.WaitFor;
      // Thread-Ergebnis auslesen
      result := ThdRes.Ok;

      // Wenn man einen String als Rückgabewert erwartet dann ..
      // ThdRes.StrRes

      // Wenn man einen Integer als Rückgabe Wert erwartet dann ..
      // ThdRes.IntRes
   finally
      // Speicher-KLasse wieder freigeben
      ThdRes.free;
   end;
end;
Der Thread selber wird suspended gestart und die Eigenschaft FreeOnTerminate wird auf True gesetzt !

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#5

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:41
Ein Beispiel:

Delphi-Quellcode:
procedure TDownloadThread.Execute;
begin
  ReturnValue := 0;

  DownloadFiles;

  ReturnValue := 1;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ThreadResult : integer;
begin
  ThreadResult := DownloadThread.WaitFor;

  If (ThreadResult = 1) then
    ShowMessage('Thread beendet')
  else
  If (ThreadResult = 0) then
  else
    ShowMessage('Thread läuft noch')
  else
  If (ThreadResult < 0) then
    ShowMessage('Thread mit Fehler ' + IntToStr(ThreadResult) + ' beendet.');
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:48
Dann darf FreeOnTerminate natürlich nicht True sein. Oder täusche ich mich da jetzt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#7

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:51
Stimmt, sonst wäre waitfor ja nicht mehr gültig.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:51
@Luckie:
Du meintest doch nicht mich oder ?

@SCP:
Mir und den anderen ging es nicht darum herrauszufinden, ob der Threads noch läuft, sondern je nach Ablauf des Threads ein bestimmtes Ergebnis zu erhalten

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#9

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:57
siehe oben
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: THREADS: Benutzung von "TThread.ReturnValue"

  Alt 5. Nov 2003, 10:59
@DataCoo, ich meinte spc.

@spc: Jetzt wird es aber kompliziert: Wo wird der negative ExitCode gesetzt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:17 Uhr.
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