![]() |
Rückgabe steuern
Hallo,
ist es möglich solange in einer Funktion z.B.
Delphi-Quellcode:
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.
function TCDCheck.WriteMedium: Boolean;
begin ... case yeah of 0: begin ... end; 1: result := false; 2: result := true; end; end; Will das wenn es eine Lösung gibt gerne ohne Multithreading machen. [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
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.
|
Re: Rückgabe steuern
Zitat:
Zitat:
...:cat:... |
Re: Rückgabe steuern
nimm doch einfach eine If...then Anweisung
Delphi-Quellcode:
müsste klappen
If 'bestimmtes Ereignis eintritt' then
begin result:=false; exit; //verlässt die funnktion end else reslut:=true; |
Re: Rückgabe steuern
Erestens: Exit stoppt nicht die Funktion, sondern verläßt sie sofort. Und zweitens: Wie geht es nach
Delphi-Quellcode:
weitere? Wenn dort nichts mehr kommt, wird die Funktion auch zu ende abgerabeitet.
else
reslut:=true; |
Re: Rückgabe steuern
man müsste quasi ne Endlosschleife bauen ... :gruebel:
|
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?? |
Re: Rückgabe steuern
Zitat:
Zitat:
|
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 |
Re: Rückgabe steuern
Meines Erachtens ist der Timer viel zu ungenau...
|
Re: Rückgabe steuern
Warum liest niemand, was ich schreibe?
|
Re: Rückgabe steuern
Naja die exakteste Zeitmessung die geht ist meiner Kentnis nach diese
Delphi-Quellcode:
Gibts da noch was genaueres???
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; [edit=Luckie]Benutz bitte die Delphi-Tags! Du wurdest schon mal in diesem Thread daraufhingewiesen. Mfg, Luckie[/edit] |
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?? |
Re: Rückgabe steuern
Delphi-Quellcode:
Ist eiegntlich kein richtiger Eventhandler, aber es sollte reichen um zu verdeutlichen, was ich meine.
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; |
Re: Rückgabe steuern
Zitat:
@burns4711: machs wie Lucky schon sagte mit ![]() |
Re: Rückgabe steuern
Vielen Dank für Eure Hilfen und Denkanstösse. Werde das dann gleich mal versuchen in die Tat umzusetzen.
|
Re: Rückgabe steuern
Wie das mit den Events geht kannst du dir hier:
![]() |
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