TThread stopen-neue Daten-neu starten??
-
Hallo Leute,
ich habe ein kleines Problem. Ich erstelle Global ein Thread-Objekt, so das
ich von überall drauf zugreifen kann, im Header der Threads habe ich einige
Variablen die mit Werten gesetzt werden sollen. Ich möchte nun den Ablauf im
Thread stoppen, den Variablen neue Daten geben und diesen Thread neu Starten
so das er vom Anfang an wieder Arbeitet:der Thread-Header:
..... protected: void __fastcall Execute(); public: AnsiString quellurlA; AnsiString quellurlB; AnsiString quellurlC; AnsiString quellurlD; TImage *imgA; TImage *imgB; TImage *imgC; TImage *imgD; .......
die CPP Datei oben
... #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMeinThread *SubProg = new TMeinThread(true); // hier der Thread //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) .....
Nun übergeb ich die Daten und starte den Thread:
... void __fastcall TForm1::Button4Click(TObject *Sender) { SubProg->quellurlA = "Http://....1.jpg"; SubProg->quellurlB = "http://....2.jpg"; // bis quellurlD SubProg->imgA = Image1; // Image1=TImage auf der Form // etc bis imgD // Thread starten: SubProg->Resume(); }
Soweit so gut, wenn der Thread fertig ist und ich im dann neue Daten gebe und
mit Resume wieder starte macht er es auch, ABERwie kann ich den Thread vorzeitig stoppen (SunProg->Suspend() ), dann neue
Daten geben und von Anfang an wieder Arbeiten lassen????Danke für eure Hilfe
gruß promicha
-
Was macht denn der Thread in Execute?
Ich hab mal sowas gemacht (in Execute):
......Execute(.....) { do { Init();//Start- Operationen in Funktion; ev mit Synchronize! while (!Terminated) { // hier alle Befehle fuer den Ablauf // (Sequenz,Schleife ... if (Restart) break; } if (!Terminated) Suspend(); } while (!terminated) }
Restart ist 'ne public- Variable des Thread
in Init auf false gestellt!!!Wenn Du von AUSSEN die Variable auf true stellst, bricht die innere Shleife ab und der Thread bleib stehen - ausser wenn Abbruch durch Terminate verursacht wird!.
-
@Promicha... du solltest in der FAQ mal den Artikel über Public-Variablen zu Gemüte führen...
-junix
-
@Junix
Den FAQ-Beitrag kenne ich, und ich schreibe auch nie Public-Variablen,
aber ich bin gerade im Experimentierstadium um Herauszufinden wie ich
das am Besten löse, das ich ein Thread stoppe und mit neuen Daten von
vorne starte. Erst wenn alles soweit klar ist Optimiere ich den gesamten
Code, nur jetzt zum Experimentieren nutze ich die schnelle Variante.Hast du vieleicht eine Idee wie ich das noch anders lösen kann, oder
wie mann ein Thread anhalten und zum Anfangspunkt zurück setzten kann?gruß promicha