Browse Source

Fehler in thread vererbung behoben

Kolja Strohm 5 years ago
parent
commit
47146ec177
4 changed files with 24 additions and 8 deletions
  1. 12 6
      DateiDialog.cpp
  2. 2 0
      DateiDialog.h
  3. 8 2
      RenderThread.cpp
  4. 2 0
      RenderThread.h

+ 12 - 6
DateiDialog.cpp

@@ -203,12 +203,6 @@ DateiDialogTh::DateiDialogTh()
 // Destruktor
 DateiDialogTh::~DateiDialogTh()
 {
-    if( run )
-    {
-        warteAufThread( 5000 );
-        if( run )
-            ende();
-    }
     dialog->release();
     if( ret )
         ret->release();
@@ -256,4 +250,16 @@ Text *DateiDialogTh::getPfad() const
 Text *DateiDialogTh::zPfad() const
 {
     return ret;
+}
+
+// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
+Thread *DateiDialogTh::release()
+{
+    if( ref == 2 && run )
+    {
+        warteAufThread( 5000 );
+        if( run )
+            ende();
+    }
+    return Thread::release();
 }

+ 2 - 0
DateiDialog.h

@@ -87,6 +87,8 @@ namespace Framework
         // Gibt den Pfad zur Datei ohne erhöhten Reference Counter zurück.
         // Funktioniert erst, nachdem der Thread beendet wurde
         __declspec( dllexport ) Text *zPfad() const;
+        // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
+        __declspec( dllexport ) Thread *release() override;
     };
 };
 

+ 8 - 2
RenderThread.cpp

@@ -26,8 +26,6 @@ RenderTh::RenderTh()
 // Destruktor 
 RenderTh::~RenderTh()
 {
-    if( run )
-        beenden();
     if( bildschirm )
         bildschirm->release();
     zeit->release();
@@ -153,4 +151,12 @@ Bildschirm *RenderTh::zBildschirm() const
 double RenderTh::getRenderTickZeit() const // gibt die Zeit zurück, die zum Rendern und zum Tick benötigt wird
 {
     return renderTickZeit;
+}
+
+// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
+Thread *RenderTh::release()
+{
+    if( ref == 2 && run )
+        beenden();
+    return Thread::release();
 }

+ 2 - 0
RenderThread.h

@@ -70,6 +70,8 @@ namespace Framework
         __declspec( dllexport ) Bildschirm *zBildschirm() const;
         // Gibt die Zeit zurück, mit der die tick() Funktion des Bildschirms als letztes aufgerufen wurde
         __declspec( dllexport ) double getRenderTickZeit() const;
+        // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
+        __declspec( dllexport ) Thread *release() override;
     };
 }