Hallo zusammen,
ich arbeite derzeit an einem privaten Projekt, und verstehe nicht wie man _sauber_ folgende Struktur hinbekommen kann. das Problem ist wie folgt:
Es gibt eine Basisklasse:
Delphi-Quelltext
1:
| Tmessage = class(TObject) |
welche nichts anders tut als Meldungen auf ein im übergebenes TRichEdit auszugeben.
Davon abgeleitet gibt es eine Klasse:
Delphi-Quelltext
1:
| rechnen = class(TMessage) |
welche bestimmte Rechenoperationen durchführt.
Innerhalt der Klasse "rechnen" gibt es eine funktion:
Delphi-Quelltext
1:
| function vielrechnen(param1, param2: double):Boolean; |
welche eine sehr lange Berechnung durchführt.
Problem:
Meine Überlegung ist, dass ich gerne die Klasse "rechnen" mehrfach erstelle würde und die dort enthaltene Funktion "vielrechnen" jeweils in einem eigenen Thread ablaufen lassen würde. Das ganze liegt natürlich im Quelltext vor, welcher jedoch rund 1000 Zeilen hat, daher habe ich das Problem hier abstrahiert. Kurz gesagt, mein Problem ist, wie überführe ich mein Objekt "rechnen" sauber in einen Thread.
Getestet habe ich folgende Varianten, finde diese jedoch alle unsauber.
Variante 1:
Einführen eine Basisklasse:
Delphi-Quelltext
1:
| Tsuperthread = class(TThread) |
davon abgeleitet
Delphi-Quelltext
1:
| Tmessage = class(Tsuperthread) |
davon abgeleitet
Delphi-Quelltext
1:
| Trechnen = class(Tmessage) |
(Innerhalb von Tmessage kann ich execute von tthread überschreiben, und dort vielrechnen aufrufen)
Prinzipiell würde das klappen, nur wäre das nicht mit Kanonen auf Spatzen geschossen ? Ich will ja eigentlich nur die Funktion vielrechnen in "rechnen" in einem eigen Thread ausführen!
Variante 2:
Trechnen ist abgeleitet von TThread, und enthält als lokale Variabble:
Delphi-Quelltext
1:
| var message: TMessage; |
Würde auch funktionieren, wobei ich ungern auf die Verebung an dieser Stelle verzichten will.
Variante 3:
TRechnen bekommt als nested Objekt einen eigenen thread:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| trechnen = class(Tmessage) type TmyThread = class(TThread) [...] end; [...] end; |
Nur wie greife ich in TmyThread auf Funktionen von TRechnen zu ?
Irgendwie klappt das nicht.
Variante 4:
Ich erstelle eine Klasse:
Delphi-Quelltext
1:
| ThreadedRechnen = class(TThread, TRechnen) |
So sollte es eigentlich funktionieren, nur kann das Delphi nicht wie mir scheint.
Daher die Frage an Euch: Was ist eine saubere Lösung für das beschriebene Problem ?