![]() |
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] |
Re: Gleichteitige Befehlsabarbeitung
ein Thread kann nur einwas gleichzeitig machen. Wenn du mehrees gleichzeitig machen willst musst du mehrere Threads verwenden.
|
Re: Gleichteitige Befehlsabarbeitung
Du solltest Dich mal mit Threads beschäftigen.
//Edit: Mist, Jens war schneller. |
Re: Gleichteitige Befehlsabarbeitung
ja, indem du die prozedur in einem neuen Thread ausführst
edit: ...war ja klar |
Re: Gleichzeitige Befehlsabarbeitung
Wobei man aber sagen sollte, das immer nur ein Thread zeichnen kann/sollte.
Grüße Klaus |
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. |
Re: Gleichzeitige Befehlsabarbeitung
Haben Ereignisse eigentlich eigene Thread's?
Sie agieren doch auch unabhängig von einander. |
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.
|
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.
|
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:
Kann mir jemand erklären, warum das nicht funktioniert?
procedure TZeit.delay(msec:longint);
var start,stop:longint; begin start := gettickcount; repeat stop := gettickcount; application.processmessages; until (stop - start ) >= msec; end; |
Re: Gleichzeitige Befehlsabarbeitung
Wieso benutzt du zum Warten nicht einen Timer? Du kannst doch mehrere Timer in deiner Anwendung benutzen.
|
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 14:43 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