]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Bugs with warnings (unexpected NULL receiver) are fixed.
authorasv <asv@opencascade.com>
Fri, 24 Jun 2005 07:02:19 +0000 (07:02 +0000)
committerasv <asv@opencascade.com>
Fri, 24 Jun 2005 07:02:19 +0000 (07:02 +0000)
src/Session/InquireServersQThread.cxx
src/Session/InquireServersQThread.h

index 00bc1dab7785e7d2fe6c00f9c32a030d41582356..a3edf53a60648a2115f517c8681be6f0388fc97c 100755 (executable)
@@ -10,7 +10,7 @@
 using namespace std;
 #include "InquireServersQThread.h"
 
-#include <qlabel.h>
+#include <qapplication.h>
 #include <qpushbutton.h>
 #include <qabstractlayout.h> 
 #include <qlayout.h>
@@ -129,6 +129,7 @@ void InquireServersGUI::setPixmap( QPixmap pix )
 
 InquireServersGUI::~InquireServersGUI()
 {
+  // Thread deletes itself in the end of run() function
   delete myThread;
 }
 
@@ -252,22 +253,20 @@ InquireServersQThread::InquireServersQThread( InquireServersGUI* r )
 
 void InquireServersQThread::run()
 {
-  while (IsChecking)
+  while ( IsChecking && receiver )
   {
-    if ( !receiver ) 
-    {
-      myExitStatus = 0;
-      return;
-    }
     for (int i=1; i<=8; i++)
       {
        if ( myMessages[i-1].isEmpty() ) {
-         if (i==8) {
+         if ( i==8 ) {
            IsChecking = false;
            //myExitStatus should be 0 because all servers exist and work
            myExitStatus = 0;
            //we should send QCloseEvent in order to close this widget (and remove from screen) 
+           qApp->processEvents();
+           sleep( 1 ); // sleep( 1 second ) in order to see 100%.  in other case it closes on 85%..
            QThread::postEvent ( receiver , new QCloseEvent() );
+           break;
          } else
            continue;
        }
@@ -279,13 +278,16 @@ void InquireServersQThread::run()
        if (result)
          {
            QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEvent, new int( i ) ) );
-           if (i==8)
+           if ( i==8 )
              {
                IsChecking = false;
                //myExitStatus should be 0 because all servers exist and work
                myExitStatus = 0;
-               //we should send QCloseEvent in order to close this widget (and remove from screen) 
+               //we should send QCloseEvent in order to close this widget (and remove from screen)
+               qApp->processEvents();
+               sleep( 1 );  // sleep( 1 second ) in order to see 100%.  in other case it closes on 85%..
                QThread::postEvent ( receiver , new QCloseEvent() );
+               break;
              }
          }
        else
@@ -297,6 +299,13 @@ void InquireServersQThread::run()
          }
       }
   }
+
+  // this outputs WARNING: QThread object is deleted while still running -- it's OK in our case!
+  //delete this;
+}
+
+InquireServersQThread::~InquireServersQThread()
+{
 }
 
 bool InquireServersQThread::AskServer(int iteration, QString ** errMessage)
index 37b32cd627e6c70c32df63b87a77babab53b3b3f..ef08ace7d27b0802f5ee105b27e25dc9c7920fcb 100755 (executable)
@@ -7,11 +7,11 @@
 //  Module : SALOME
 //  $Header$
 
-#include <qapplication.h>
 #include <qthread.h> 
 #include <qvbox.h> 
 #include <qprogressbar.h> 
 #include <qlabel.h> 
+#include <qguardedptr.h> 
 
 /**********************************************************
 **  Class:   InquireEvent
@@ -40,6 +40,7 @@ class InquireServersQThread : public QThread
 {
 public:
   InquireServersQThread( InquireServersGUI* r );
+  virtual ~InquireServersQThread();
 
   //the main loop of this thread
   virtual void run() ;
@@ -63,7 +64,7 @@ private:
 
 //variables:
 
-  InquireServersGUI* receiver;
+  QGuardedPtr<InquireServersGUI> receiver;
   int _argc ;
   char ** _argv;
   //this variable is true if we are checking servers