Hallo,
ich möchte einen Thread starten (klappt einwandfrei, auch der Code in
TEngineCtl::Execute()). Ich möchte 2 Buttons: Starten und Beenden des Threads.
Auf Start und Beenden kann ich je ein paarmal klicken dann stürtzt der
Hauptthread (Form1) ab.
Klar ist, dass ich nicht >1x "TestRun = new TEngineCtl(false);" ausführen
sollte s.u. aber selbst wenn ich die Zeile durch TestRun->Resume ersetze
und im FormCreate:
----------------------------------------------
TestRun = new TEngineCtl(false);
TestRun->Suspend();
----------------------------------------------
eintrage stürzt die Anwendung nach mehrfachem Start/Beenden klicken ab.
Warum funktioniert delete TestRun nicht? :
[C++ Fehler] Main.cpp(200): E2166 Zugriff auf Destruktor für 'TEngineCtl' nicht möglich.
Der Destructor existiert:
_fastcall TEngineCtl::~TEngineCtl() {
delete perf0;
}
Leider funktionieren die Links hier im Forum mit Tips mit dem Umgang mit Threads nicht mehr und eine verfnünftige Lösung konnte ich bisher nicht
ergooglen.
WIE startet, beendet und entsorgt man einen Thread ordentlich?
Hier die Buttons:
-----------------------------------------------------------------------
void __fastcall TForm1::StartClick(TObject *Sender)
{
TestRun = new TEngineCtl(false);
Start->Enabled=false;
Button3->Enabled=true;
}
void __fastcall TForm1::BeendenClick(TObject *Sender)
{
TestRun->Suspend();
TestRun->Terminate(); // Thread beenden
// delete TestRun; // Warum funkt das nicht
Start->Enabled=true; // Startbutton aktivieren
Button3->Enabled=false; // Abbrechenbutton deaktivieren
}
ich möchte einen Thread starten (klappt einwandfrei, auch der Code in
TEngineCtl::Execute()). Ich möchte 2 Buttons: Starten und Beenden des Threads.
Auf Start und Beenden kann ich je ein paarmal klicken dann stürtzt der
Hauptthread (Form1) ab.
Klar ist, dass ich nicht >1x "TestRun = new TEngineCtl(false);" ausführen
sollte s.u. aber selbst wenn ich die Zeile durch TestRun->Resume ersetze
und im FormCreate:
----------------------------------------------
TestRun = new TEngineCtl(false);
TestRun->Suspend();
----------------------------------------------
eintrage stürzt die Anwendung nach mehrfachem Start/Beenden klicken ab.
Warum funktioniert delete TestRun nicht? :
[C++ Fehler] Main.cpp(200): E2166 Zugriff auf Destruktor für 'TEngineCtl' nicht möglich.
Der Destructor existiert:
_fastcall TEngineCtl::~TEngineCtl() {
delete perf0;
}
Leider funktionieren die Links hier im Forum mit Tips mit dem Umgang mit Threads nicht mehr und eine verfnünftige Lösung konnte ich bisher nicht
ergooglen.
WIE startet, beendet und entsorgt man einen Thread ordentlich?
Hier die Buttons:
-----------------------------------------------------------------------
void __fastcall TForm1::StartClick(TObject *Sender)
{
TestRun = new TEngineCtl(false);
Start->Enabled=false;
Button3->Enabled=true;
}
void __fastcall TForm1::BeendenClick(TObject *Sender)
{
TestRun->Suspend();
TestRun->Terminate(); // Thread beenden
// delete TestRun; // Warum funkt das nicht
Start->Enabled=true; // Startbutton aktivieren
Button3->Enabled=false; // Abbrechenbutton deaktivieren
}
Comment