Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rückgabe steuern (https://www.delphipraxis.net/47587-rueckgabe-steuern.html)

burns4711 13. Jun 2005 15:09


Rückgabe steuern
 
Hallo,

ist es möglich solange in einer Funktion z.B.
Delphi-Quellcode:
function TCDCheck.WriteMedium: Boolean;
begin

...
  case yeah of
  0: begin ... end;
  1: result := false;
  2: result := true;

 end;
 end;
zu bleiben bis ein bestimmtes Ereignis eintritt so dass die Funktion dann erst einen Rückgabewert liefert. Nach Möglichkeit ohne sleep und ähnliches, da währenddessen noch was anderes läuft.
Will das wenn es eine Lösung gibt gerne ohne Multithreading machen.

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Luckie 13. Jun 2005 15:12

Re: Rückgabe steuern
 
Nein, so ohne weiteres nicht, das jede Zeile (Befehl, Funktion) sequentiell abgearbeitet wird. Aber lös doch einfach einen Event aus, wenn ein Ereiegnis zutrifft und schreibe, das was passieren soll, in deinen Eventhandler.

sakura 13. Jun 2005 15:14

Re: Rückgabe steuern
 
Zitat:

Zitat von burns4711
Nach Möglichkeit ohne sleep und ähnliches, da währenddessen noch was anderes läuft.

Es sollen also zwei Dinge in Deinem Programm gleichzeitig (parallel) ausgeführt werden.

Zitat:

Zitat von burns4711
Will das wenn es eine Lösung gibt gerne ohne Multithreading machen.

Dann geht es nur mit Hilfe von Threads ;)

...:cat:...

Pitch-Bull 13. Jun 2005 15:15

Re: Rückgabe steuern
 
nimm doch einfach eine If...then Anweisung
Delphi-Quellcode:
If 'bestimmtes Ereignis eintritt' then
          begin
            result:=false;
            exit; //verlässt die funnktion
          end
            else
            reslut:=true;
müsste klappen

Luckie 13. Jun 2005 15:17

Re: Rückgabe steuern
 
Erestens: Exit stoppt nicht die Funktion, sondern verläßt sie sofort. Und zweitens: Wie geht es nach
Delphi-Quellcode:
else
  reslut:=true;
weitere? Wenn dort nichts mehr kommt, wird die Funktion auch zu ende abgerabeitet.

TeronG 13. Jun 2005 15:20

Re: Rückgabe steuern
 
man müsste quasi ne Endlosschleife bauen ... :gruebel:

Pitch-Bull 13. Jun 2005 15:22

Re: Rückgabe steuern
 
na, wenn das ereignis eintritt, läuft die funktion nicht mehr weiter, bzw.
Result ist auf false gesetzt.

Oder habe ich jetzt was missverstanden. wollte das burns4711 nicht??

Luckie 13. Jun 2005 15:23

Re: Rückgabe steuern
 
Zitat:

Zitat von TeronG
man müsste quasi ne Endlosschleife bauen ...

Was die denkbar schlechteste Lösung wäre. Lös einen Event aus, wenn der gewünschte Zustand eingetreten ist und gut ist.

Zitat:

Zitat von Pitch-Bull
na, wenn das ereignis eintritt, läuft die funktion nicht mehr weiter, bzw.
Result ist auf false gesetzt.

Wenn ich ihn richtig verstanden habe, will er so lange warten, bis ein betsimmter Zustand erreicht ist.

burns4711 13. Jun 2005 15:30

Re: Rückgabe steuern
 
Hallo,

ich habe eine Funktion namens Updatestatus, die die verschiedenen Stati meines Programmes überwacht und zwischen diesen hin und her schaltet. Entscheidungen werden von dieser mittels der Rückgabewerte meiner einzelnen Funktionen getroffen die sie aufruft. Nun gibt diese eine besagte funktion leider alles viel zu schnell zurück und müsste eigentlich noch auf den Wert einer anderen Funktion warten die mittels Timer in regelmäßigen Abständen läuft bis die BEdingung erfüllt ist. Dann erst und NUR dann darf die oben erwähnte Funktion erst ihren Rückgabewert liefern, da die Funktion updatestatus sonst falsch entscheidet.

Hoffe das erläutert mein Problem näher

Pitch-Bull 13. Jun 2005 15:32

Re: Rückgabe steuern
 
Meines Erachtens ist der Timer viel zu ungenau...

Luckie 13. Jun 2005 15:34

Re: Rückgabe steuern
 
Warum liest niemand, was ich schreibe?

burns4711 13. Jun 2005 15:35

Re: Rückgabe steuern
 
Naja die exakteste Zeitmessung die geht ist meiner Kentnis nach diese

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  PerfFreq, StartTime, CurrentTime: int64;
begin
  if QueryPerformanceFrequency(PerfFreq) then
  begin
    QueryPerformanceCounter(StartTime);
    // hier laufen die zu messenden Aktionen
        QueryPerformanceCounter(CurrentTime);
    Label1.Caption := FormatFloat('Dauer: 0.000000 s',
      (CurrentTime - StartTime) / PerfFreq);
  end else
    Label1.Caption := 'Hardware-Voraussetzung fehlt';
end;
Gibts da noch was genaueres???

[edit=Luckie]Benutz bitte die Delphi-Tags! Du wurdest schon mal in diesem Thread daraufhingewiesen. Mfg, Luckie[/edit]

burns4711 13. Jun 2005 15:36

Re: Rückgabe steuern
 
@Luckie

Ich bin leider noch nicht so gut in Delphi, dass ich weiß wie man das mit dem Eventhandler macht.. gibts da irgendeinen Tipp zu??

Luckie 13. Jun 2005 15:42

Re: Rückgabe steuern
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure MyNotify(Sender: TOBject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyNotify(Sender: TObject);
begin
  ShowMessage('Oops, I did it again.');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to 99 do
  begin
    Listbox1.Items.Add(IntToStr(i));
    Sleep(10);
    Listbox1.Refresh;
    if i = 59 then
    begin
      MyNotify(Listbox1);
      break;
    end;
  end;
end;
Ist eiegntlich kein richtiger Eventhandler, aber es sollte reichen um zu verdeutlichen, was ich meine.

TeronG 13. Jun 2005 15:43

Re: Rückgabe steuern
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von TeronG
man müsste quasi ne Endlosschleife bauen ...

Was die denkbar schlechteste Lösung wäre. Lös einen Event aus, wenn der gewünschte Zustand eingetreten ist und gut ist.

Klar .. hast ja recht .. mir is hald als erstes Application.ProcessMessages eingefallen ..

@burns4711: machs wie Lucky schon sagte mit Hier im Forum suchenEvents.

burns4711 13. Jun 2005 15:46

Re: Rückgabe steuern
 
Vielen Dank für Eure Hilfen und Denkanstösse. Werde das dann gleich mal versuchen in die Tat umzusetzen.

Luckie 13. Jun 2005 15:57

Re: Rückgabe steuern
 
Wie das mit den Events geht kannst du dir hier: http://www.luckie-online.de/Delphi/Sonstiges/ angucken -> TFileSplitter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz