Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Gleichzeitige Befehlsabarbeitung (https://www.delphipraxis.net/94765-gleichzeitige-befehlsabarbeitung.html)

Flo.Hoe 26. Jun 2007 17:00


Gleichzeitige Befehlsabarbeitung
 
Hi,

Ich habe folgendes Problem.
In der Prozedur Button1Click soll Aktualisieren aufgerufen werden.
Ohne Verzögerung sollen dann die weiteren Befehle ausgeführt werden.
Delphi-Quellcode:


procedure TForm2.Button1Click(Sender: TObject);
begin
 Aktualisieren;
 Form1.show
 close;
end;



procedure TForm2.Aktualisieren;
begin
 while not Pause do begin //Pause bleibt lange Zeit false
   //Zeichnen;
   //30 Frames warten
 end;
end;



... aber Der Computer bleibt bei Aktualisieren hängen und bearbeitet nicht die nächsten Schritte.


Kann man dieses sture Vorgehen deaktivieren und bewirken dass er sich um mehrere Prozeduren gleichzeitig kümmert?


[edit=Matze]Für die Suchfunktion tragischen Tippfehler im Titel korrigiert. *g* MfG, Matze[/edit]

SirThornberry 26. Jun 2007 17:04

Re: Gleichteitige Befehlsabarbeitung
 
ein Thread kann nur einwas gleichzeitig machen. Wenn du mehrees gleichzeitig machen willst musst du mehrere Threads verwenden.

DeddyH 26. Jun 2007 17:04

Re: Gleichteitige Befehlsabarbeitung
 
Du solltest Dich mal mit Threads beschäftigen.

//Edit: Mist, Jens war schneller.

dominikkv 26. Jun 2007 17:04

Re: Gleichteitige Befehlsabarbeitung
 
ja, indem du die prozedur in einem neuen Thread ausführst

edit: ...war ja klar

Klaus01 26. Jun 2007 17:21

Re: Gleichzeitige Befehlsabarbeitung
 
Wobei man aber sagen sollte, das immer nur ein Thread zeichnen kann/sollte.

Grüße
Klaus

Flo.Hoe 26. Jun 2007 17:22

Re: Gleichzeitige Befehlsabarbeitung
 
Dreifachen Dank für die Antwort.
Ich hab mir diese Thread's mal angeguckt und ich glaube das ist noch etwas zu schwierig für mich.
Vielleicht kann ich das Problem irgendwie anders lösen... mal schauen.

Flo.Hoe 26. Jun 2007 18:00

Re: Gleichzeitige Befehlsabarbeitung
 
Haben Ereignisse eigentlich eigene Thread's?
Sie agieren doch auch unabhängig von einander.

Apollonius 26. Jun 2007 18:02

Re: Gleichzeitige Befehlsabarbeitung
 
Nein, das tun sie nicht. Wenn du in einem onClick-Ereignis das Programm lahmlegst (z.B. Endlosschleife), dann reagiert nichts mehr. Das Ereignis wird im Hauptthread ausgeführt.

mkinzler 26. Jun 2007 18:03

Re: Gleichzeitige Befehlsabarbeitung
 
Die VCL in der jetzigen Form nicht threadsicher. D.H. alles was mit der VCL zu tun hat sollte im Haupthread passieren.

Flo.Hoe 27. Jun 2007 15:52

Re: Gleichzeitige Befehlsabarbeitung
 
Ich bin gerade dabei ein Spiel zu programmieren.
Gibt es denn wirklich keine Alternative, auf der Form etwas in einem bestimmten Zeitintervall zeichnen zu lassen?
Den Timer kann ich in meinem Fall nicht nehmen, weil in der 'gleichzeitig'' ablaufenden Nebenrechnung folgende Funktion zum warten nutze
Delphi-Quellcode:
procedure TZeit.delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
  stop := gettickcount;
  application.processmessages;
  until (stop - start ) >= msec;
end;
Kann mir jemand erklären, warum das nicht funktioniert?

calculon 27. Jun 2007 16:27

Re: Gleichzeitige Befehlsabarbeitung
 
Wieso benutzt du zum Warten nicht einen Timer? Du kannst doch mehrere Timer in deiner Anwendung benutzen.

Flo.Hoe 27. Jun 2007 22:50

Re: Gleichzeitige Befehlsabarbeitung
 
Ich habe in meiner Anwendung mehrere Objekte.
Ich müsste dann für jedes einen eigenen Timer Platzieren.
Das gilt auch für Kopien eines Objektes zur Laufzeit.
Es kann doch wohl kaum der Sinn der Sache sein, die Form mit Timern voll zu hauen.

[Edit]
Und mit vielen einzelnen Thread's würde die Leistung der Anwendung zurückgehen.
Außerdem habe ich gemerkt, dass die oben angegebene Prozedur nur dann weg fällt, wenn dass
Timer.Intervall unter 100 ist. (delay verzögert die Berechnungen um 70 ms )
[/Edit]


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