Эх сурвалжийг харах

Fehler beim beenden des Threads behoben

Kolja Strohm 5 жил өмнө
parent
commit
3e0c070b39

+ 0 - 2
Asteroids/Editor/Editor.cpp

@@ -37,8 +37,6 @@ AsteroidsEditor::~AsteroidsEditor()
         laden->release();
     if( i )
         i->release();
-    if( daten->isRunning() )
-        daten->exitThread();
     if( daten )
         daten->release();
     dialogs->release();

+ 12 - 9
Asteroids/Editor/Karte/EditorKarte.cpp

@@ -16,9 +16,6 @@ KarteDaten::KarteDaten( EditorKlient *client )
 
 KarteDaten::~KarteDaten()
 {
-    exit = 1;
-    if( isRunning() )
-        warteAufThread( INT_MAX );
     cs.lock();
     for( auto i = objekte.getIterator(); i; i++ )
         delete i._;
@@ -121,12 +118,6 @@ void KarteDaten::thread()
     }
 }
 
-void KarteDaten::exitThread()
-{
-    exit = 1;
-    warteAufThread( INT_MAX );
-}
-
 const ObjektDaten *KarteDaten::getObjekt( int index )
 {
     ObjektDaten *ret = 0;
@@ -210,4 +201,16 @@ char *KarteDaten::getError() const
 bool KarteDaten::hasAktions() const
 {
     return aktionen.getEintragAnzahl() > 0;
+}
+
+// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
+Thread *KarteDaten::release()
+{
+    if( ref == 2 && run )
+    {
+        exit = 1;
+        if( isRunning() )
+            warteAufThread( INT_MAX );
+    }
+    return Thread::release();
 }

+ 2 - 1
Asteroids/Editor/Karte/EditorKarte.h

@@ -87,7 +87,6 @@ namespace Editor
         void getSpieler( int index, std::function< bool( SpielerDaten* ) > callBack );
         void getTeam( int index, std::function< bool( TeamDaten* ) > callBack );
         void thread() override;
-        void exitThread();
         const ObjektDaten *getObjekt( int index );
         const SpielerDaten *getSpieler( int index );
         const TeamDaten *getTeam( int index );
@@ -99,5 +98,7 @@ namespace Editor
         bool hasError() const;
         char *getError() const;
         bool hasAktions() const;
+        // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
+        Thread *release() override;
     };
 }