Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf Procedureende warten ?! (https://www.delphipraxis.net/62842-auf-procedureende-warten.html)

moelski 10. Feb 2006 11:43


Auf Procedureende warten ?!
 
Moin !

Ich habe da zwei Proceduren.
Procedure A macht eine Initialisierung der Anwendung. Das muss erst abgeschlossen sein.

Nun kann es aber vorkommen, das Procedure B aufgerufen wird, ohne das die Initialisierung fertig ist, bzw. Procedure A durchgelaufen ist.

Wie kann ich Procedure B dazu bringen, das sie so lange wartet, bis Procedure A durchgelaufen ist?

Sascha_OW 10. Feb 2006 11:48

Re: Auf Procedureende warten ?!
 
wenn du die irgendwo aufrufst ist es doch eh so das Delphi die von oben nach unten abarbeitet also sollte es doch kein problem sein?

mkinzler 10. Feb 2006 11:49

Re: Auf Procedureende warten ?!
 
Wenn du sie im gleichen Codeblock aufrufst:

begin
...
a();
b();
...
end;

sollte es eigentlich funktionieren.

Die Aufrufe der beiden Prozeduren nuß allerdings innerhalb eines Threads erfolgen.

moelski 10. Feb 2006 11:52

Re: Auf Procedureende warten ?!
 
Moin !

Nene so is das nicht. Dann wäre alles einfach.

Also A macht eine Initialisierung.
B macht jetzt z.B. das Laden einer Datei wenn man im Explorer den Doppelklick macht.

So, die Anwendung geht auf und A rennt los. Und irgendwann haut halt B dazwischen.
Und dort würde ich dann gerne warten bis A fertig ist, weil es sonst zu komischen Problemen kommt ;-)

Angel4585 10. Feb 2006 11:54

Re: Auf Procedureende warten ?!
 
du könntest am ende der Procedure A ein Flag setzen, welches du in Procedure B abfragst:

Delphi-Quellcode:
while not Flag do
 Application.Proccessmessages;
so oder so ähnlich sollte das funktionieren

Sascha_OW 10. Feb 2006 11:58

Re: Auf Procedureende warten ?!
 
ahcso dann habe ich das falsch vestanden sry

moelski 10. Feb 2006 12:05

Re: Auf Procedureende warten ?!
 
Moin !

Delphi-Quellcode:
while not Flag do
Application.Proccessmessages;
Genau das habe ich auch versucht. Aber komischerweise hängt die Anwendung dann.
Die Initialisierung rennt garnimmer weiter und auch das Laden der Datei wird nie gestartet.

Bei mir sah es so aus:
Delphi-Quellcode:
  while InitialisierungAbgeschlossen = false do
    Application.ProcessMessages;
Wobei InitialisierungAbgeschlossen auf True geht wenn eben diese abgeschlossen ist ...

JasonDX 10. Feb 2006 12:12

Re: Auf Procedureende warten ?!
 
Zitat:

Zitat von moelski
Genau das habe ich auch versucht. Aber komischerweise hängt die Anwendung dann.
Die Initialisierung rennt garnimmer weiter und auch das Laden der Datei wird nie gestartet.

Ok, mir kommt das jetzt auch komisch vor. Die While-Schleife blockiert den Thread, in dem die Prozedur grad läuft (afaik...). D.h., wenn die andere Prozedur auch blockiert wird, muss sie im selben Thread laufen.
Wie ist das aber möglich, außer dass Prozedur b in Prozedur a aufgerufen wird?
Vielleicht könntest du folgendes versuchen:
Ein Flag, das besagt, ob Prozedur B ausgeführt werden soll. Dieses wird am Beginn auf False gesetzt.
Dazu kommt noch ein Flag das besagt, ob fertig initialisiert wurde.
So, in Prozedur B fragst du:
Ist Fertig Initialisiert? Ja, dann passts, sonst setz das Flag dass sie am Ende des Initialisierens ausgeführt werden soll, und raus aus der Prozedur.
In Prozedur A fragst du ganz am Ende: Soll Prozedur B ausgeführt werden? Wenn ja, dann führ sie aus und sonst is gut.
Afaik dürfte das dann so klappen, ist aber auch nicht gerade die eleganteste Lösung.

greetz
Mike

Angel4585 10. Feb 2006 12:32

Re: Auf Procedureende warten ?!
 
THREAD?????

ist procedur B in einem Thread??

also fallse ja dann mach doch anstatt dam Application.Terminate mal ein sleep(10)rein


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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