r578: no message
[ctsim.git] / src / docs.cpp
index bb8ec90d973e122046ac32d95cda6c34d7f52bb4..16462d7bb27544ff5cdc8c9e51b6de72ae6d91cb 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: docs.cpp,v 1.27 2001/02/23 21:58:31 kevin Exp $
+**  $Id: docs.cpp,v 1.28 2001/02/25 06:32:12 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -149,13 +149,16 @@ ProjectionFileDocument::OnSaveDocument(const wxString& filename)
 
 ProjectionFileDocument::~ProjectionFileDocument()
 {
+  m_criticalSection.Enter();
   for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); 
-        i != m_vecpBackgroundSupervisors.end(); i++) {
+        i != m_vecpBackgroundSupervisors.end(); i++)
           BackgroundSupervisor::cancelSupervisor(*i);
-    }
-  
-  while (m_vecpBackgroundSupervisors.size() > 0)
-    ::wxYield();
+  m_criticalSection.Leave();
+
+  while (m_vecpBackgroundSupervisors.size() > 0) {
+     ::wxUsleep(50);
+     ::wxYield();
+  }
 
   delete m_pProjectionFile;
 }
@@ -177,7 +180,7 @@ ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event)
   BackgroundSupervisor* pSupervisor = reinterpret_cast<BackgroundSupervisor*>(event.GetClientData());
   wxASSERT (pSupervisor != NULL);
 
-  wxCriticalSectionLocker locker (m_criticalSection);
+  m_criticalSection.Enter();
   bool bFound = false;
   for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); 
         i != m_vecpBackgroundSupervisors.end(); 
@@ -187,8 +190,13 @@ ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event)
             bFound = true;
             break;
         }
-   if (! bFound) 
+  m_criticalSection.Leave();
+
+  if (! bFound) 
      sys_error (ERR_SEVERE, "Could not find background task [ProjectionFileDocument::removeBackgroundTask");
+  
+  wxCommandEvent ackEvent (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_DOCUMENT_ACK_REMOVE);
+  wxPostEvent (pSupervisor, ackEvent);
 }
 
 bool