![]() |
progressform, mehrere funktionen parallel
hallo!
ich habe meine progressform (oben task eintragen, unten den fortschritt des einzelnen tasks und den gesamtstand mit balken und anzeige sowie geschätzter zeit) soweit fertig. wenn ich eine der funktionalitäten (balken oder tasks eintragen) aufrufe, funktioniert es problemlos. wenn ich nun aber beide gleichzeitig haben will, also von meinem testform die jeweiligen funktionen nacheinander starten will, also zuerst die "task einfügen" mittels button click starte und dann die balken-simulation dazu starte, dann funktioniert immer nur das gerade zuletzt gewählte, also die letzte aktion gewinnt. wie kann ich erreichen, dass z.b. das einfügen in die liste unbeirrt weiterarbeitet, auch wenn ich nun die balken-simulation starte? also dass beide parallel arbeiten. muss ich da nun vor dem aufruf der jeweiligen aktion einen thread erzeugen und diesen nach der bearbeitung wieder beenden, oder wie genau kann ich dieses parallelität erreichen. danke für eure hilfe. stephan. |
Re: progressform, mehrere funktionen parallel
Zitat:
|
Re: progressform, mehrere funktionen parallel
das heißt also, ich muss folgendes machen:
(also pseudocode) thread erzeugen funktion aufrufen thread killen ok, dann weiß ich schon, was zu tun war. danke fürs "auf die sprünge helfen", die narkose der op gestern blockiert heute scheinbar etwas. :lol: |
Re: progressform, mehrere funktionen parallel
also irgendwie bekomme ich bei der obigen variante eine sonderbare fehlermeldung von delphi.
ich mache nichts anderes als im OnCreate ein mythread.Create(false) aufzurufen und im OnDestroy ein mythread.free; das quitiert mir delphi aber mit der meldung "abstrakter fehler" beim start des programms. was ist denn da wieder verkehrt? ich mach doch nichts anderes, als einen thread zu erzeugen und wieder freizugeben. den thread habe ich im private teil der formclass definiert mit mythread: TThread. hab ich da wo einen denkfehler drinnen oder wo könnte es sich hier spießen?? denn irgendwie will das mit den threads nicht so ganz wie ich will :roll: stephan. |
Re: progressform, mehrere funktionen parallel
Du musst nicht eine Variable vom Typ TThread erzeugen, sondern davon eine Klasse ableiten und diese dann instanziieren. Abstrakter Fehler heißt mehr oder weniger, dass versucht wurde, eine abstrakte Klasse zu instanziieren.
|
Re: progressform, mehrere funktionen parallel
äh sorry, ich versteh gerade nur bahnhof. kannst du mir das bitte an hand eines codefragments zeigen?
|
Re: progressform, mehrere funktionen parallel
Da meine Syntaxkenntnisse in Delphi etwas eingerostet sind, habe ich mal nach dem nächstbesten Beitrag über TThread gesucht und poste hier den Quellcode:
Delphi-Quellcode:
In deinem Hauptformular kannst du dann zum Beispiel statt deiner Variablen vom Typ TThread eine vom Typ TMyThread erzeugen.
uses
Classes; type TMyThread = class(TThread) private { Private-Deklarationen } protected procedure Execute; override; end; implementation procedure TMyThread.Execute; begin // Tue etwas end; |
Re: progressform, mehrere funktionen parallel
ups, das wird ja aufwändiger als ich gedacht habe, vorallem welche aktion soll ich im execute haben?
ich will ja nur einen thread erzeugen und wieder löschen. und das auch nur, damit ich in ein formular was einfügen kann und gleichzeitig die fortschrittsbalken anpassen kann. also dass zwei funktionen parallel laufen. deshalb frage ich mich auch, welche funktionalität ich da im execute reinpacken soll, muss respektive kann. :roll: ich glaube, ich mach mich mal auf die suche nach einem beispiel, in welchem threads verwendet werden und sowas ähnliches passiert, vielleicht wirds mir dann klarer. |
Re: progressform, mehrere funktionen parallel
Guck mal hier:
![]() |
Re: progressform, mehrere funktionen parallel
Luckie hat Recht, guck dir mal sein (sehr gutes)
Tutorial zum Thema Threads an, dann wirst du auch die Zusammenhänge besser verstehen können. Generell kann ich dir nur folgendes noch mit auf dem Weg geben: - Du brauchst ja einen Thread, da du etwas parallel (ja ich weiss die wenigsten haben core duo, bzw 2 prozessoren), also sagen wir mal Quasi-Parallel abarbeiten willst, dafür brauchst du einen Thread. Wenn du von TThread ableitest musst du natürlich die virtuelle Execute() Methode überschreiben, da hier ja reinkommt, was der Thread dann machen soll, wenn er denn dann mal gestartet ist. Weitere Themen, Synchronisation, Mutex..., das findest du alle bei Luckie super erklärt, also los gehts :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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