Hilfe bei Thread Programmierung
-
Hallo zusammen,
ich möchte gerne einen zweiten Thread eröffnen, damit während Berechnungen Zwischenergebnisse ausgegeben werden können.
Ich bin grundsätzlich mit der Thread Programmierung vertraut. Bin aber mittlerweile in meinem Projekt ein bisschen durcheinander gekommen.
Ich habe eine Unit1, die nur das Formular und deren Komponenten verwendet wird.
In Unit2 steht der komplette Programmcode, den ich durchlaufen möchte. Es sind bis jetzt ca. 30 einzelne Funktionen, die immerwieder untereinander aufgerufen werden.
Jetzt habe ich ein TThread Objekt hinzugefügt. Dazu wurde eine neue Unit3 angelegt.
Kann ich in der ersten Unit den Thread eröffnen, in der Execute-Methode des Threads die Initialfunktion aus Unit2 aufrufen und in Unit2 irgendwie Werte übergeben, damit auf der Form Zwischenergebnisse ausgegeben werden? Ich komme nicht ganz zurecht mt der Synchronize Methode.
//Unit1.cpp--------------------------------------------------------------------- //Eröffnen des Threads---------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { TMyThread *FThread = new TMyThread(false); }//Unit2.cpp--------------------------------------------------------------------- //Eröffnungsfunktion------------------------------------------------------------ void optimierung() { //Rekursiver Aufruf mehrerer Funktionen über lange Zeit }//Unit3.h----------------------------------------------------------------------- class TMyThread : public TThread { private: protected: void __fastcall Execute(); void __fastcall GuiElements(); public: __fastcall TMyThread(bool CreateSuspended); };//Unit3.cpp--------------------------------------------------------------------- __fastcall TMyThread::TMyThread(bool CreateSuspended) : TThread(CreateSuspended) { FreeOnTerminate = true; } //--------------------------------------------------------------------------- void __fastcall TMyThread::Execute() { optimierung(); } //--------------------------------------------------------------------------- void __fastcall TMyThread::GuiElements() { }Kann ich es irgendwie umgehen, alle Funktionen aus Unit2 zwangsweise in Unit3 bzw. in die Execute-Methode zu verschieben?
Danke und Liebe Grüße
-
Hmm also nur anhand deines Textes stellt sich mir die Frage ob Du es denn schonmal getestet hast. Denn eigentlich sollte es wenn ich dich richtig verstanden habe keine Probleme bereiten.
-
Hallo,
die Thread Programmierung ansich ist nicht das Problem. Der zweite Thread wird ordnungsgemäß eröffnet und die Funktionen laufen durch.
Was ich nicht verstehe ist, wie ich im Programmablauf in Unit2.cpp die Zwischenergebnisse ans Formular schicke. Sollte ich dafür keine Synchronize Methode ansprechen?
Ich habe schon versucht, eine solche Methode in der Thread Klasse zu implementieren, der zwei double Werte übergeben werden sollen. Aber da ich mich ja nicht mehr in Unit3 (Thread-Unit) befinde, ist im die Funktion unbekannt. Auch bei Inklusion der Header.
Mein Problem ist also die Synchronize Methode der Thread Klasse, wenn ich mich in Unit2 befinde.