]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Fix for "Escape" button
authorenk <enk@opencascade.com>
Wed, 19 Apr 2006 07:34:23 +0000 (07:34 +0000)
committerenk <enk@opencascade.com>
Wed, 19 Apr 2006 07:34:23 +0000 (07:34 +0000)
Fix for Bug IPAL11935:
Crash after close "Animation" dialog box with saving pictures

src/VISU_I/VISU_TimeAnimation.cxx

index bb6f4078af2ae79f53e7bf976d255f9da0cfe08a..60e896e200a7c29470ee324e92e3c7370e46ef51 100644 (file)
@@ -95,6 +95,23 @@ VISU_TimeAnimation::~VISU_TimeAnimation()
   for (int i = 0; i < getNbFields(); i++) {
     clearData(myFieldsLst[i]);
   }
+
+  /* Terminates the execution of the thread. 
+   * The thread may or may not be terminated immediately, 
+   * depending on the operating system's scheduling policies. 
+   *  
+   * Use QThread::wait() after terminate() for synchronous termination.
+   *
+   * When the thread is terminated, all threads waiting for the the thread to finish will be woken up.
+   * 
+   * Warning: This function is dangerous, and its use is discouraged. 
+   * The thread can be terminated at any point in its code path. 
+   * Threads can be terminated while modifying data. 
+   * There is no chance for the thread to cleanup after itself, 
+   * unlock any held mutexes, etc. In short, use this function only if absolutely necessary. 
+   */
+  QThread::terminate();
+  QThread::wait(100);
 }
 
 
@@ -573,6 +590,8 @@ void VISU_TimeAnimation::run()
   qApp->lock();
   while (myIsActive) {
     emit frameChanged(myFrame, myFieldsLst[0].myTiming[myFrame]);
+    if(!(myFieldsLst[0].myField))
+      break;
     for (int i = 0; i < getNbFields(); i++) {
       FieldData& aData = myFieldsLst[i];
       if (myFrame > 0) {