]> Creatis software - clitk.git/blobdiff - vv/vvThreadedFilter.cxx
itkv4 migration:
[clitk.git] / vv / vvThreadedFilter.cxx
index 1079b7f3217670cfecb7f4972454a8051e02bbd8..0a074f37e312b31ed4528224830a1d8d3ad40217 100644 (file)
@@ -60,9 +60,9 @@ void vvThreadedFilter::Update()
   this->setTerminationEnabled(true);
   std::string temp;
   while (this->isRunning()) {
+    // try {
     m_FilterBase = m_Filter->GetFilterBase(); // get filterbase is only set after Update
     if (m_FilterBase != NULL) {
-      //      m_FilterBase->StopOnErrorOff(); // filter can be interrupted
       progress.SetProgress(m_FilterBase->GetCurrentStepNumber(), 
                           m_FilterBase->GetNumberOfSteps());
       if (temp != m_FilterBase->GetCurrentStepName()) {
@@ -70,7 +70,7 @@ void vvThreadedFilter::Update()
       }
       temp = m_FilterBase->GetCurrentStepName();
     }
-    this->wait(200); // in milisecond
+    this->wait(200); // in miliseconds
     qApp->processEvents();
   }
 }
@@ -81,7 +81,16 @@ void vvThreadedFilter::Update()
 void vvThreadedFilter::run()
 {
   assert(m_Filter != NULL);
-  m_Filter->Update();
+  try {
+    m_Filter->Update();
+  }
+  catch(clitk::ExceptionObject e) {
+    DD("vvThreadedFilter : exceptionobject handeled");
+    DD(e.what());
+    QApplication::restoreOverrideCursor();
+    QMessageBox::information(new QWidget, tr("Error"), e.what());  
+  }
+  DD("end RUN");
 }
 //------------------------------------------------------------------------------
 
@@ -89,16 +98,11 @@ void vvThreadedFilter::run()
 //------------------------------------------------------------------------------
 void vvThreadedFilter::reject()
 {
-  // First, say the filter it must stop
+  // First, say the filter it must stop as soon as possible. We then
+  // wait that an exception occur in the main thread.
   if (m_FilterBase != NULL) {
-    m_FilterBase->SetMustStop(true);
+    m_FilterBase->Cancel();
   }
-  // Indicate to the user it will stop
-  QApplication::restoreOverrideCursor();
-  QMessageBox::information(new QWidget, tr("Error"), m_FilterBase->GetLastError().c_str());  
-  // Quit the thread (is it needed ?)
-  this->quit();
-  emit ThreadInterrupted();
 }
 //------------------------------------------------------------------------------