r624: no message
[ctsim.git] / src / backgroundsupr.cpp
index 18dde621d4dc40c94643e3f33681d88a67d2ddf4..13c1e32de81cf5f013e1aa6169903cd3f785e29b 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2001 Kevin Rosenberg
 **
-**  $Id: backgroundsupr.cpp,v 1.17 2001/03/09 02:40:17 kevin Exp $
+**  $Id: backgroundsupr.cpp,v 1.18 2001/03/09 21:31:51 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
@@ -57,7 +57,7 @@ END_EVENT_TABLE()
 BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxFrame* pParentFrame, BackgroundProcessingDocument* pDocument, const char* const pszProcessTitle, int iTotalUnits)
     : wxEvtHandler(), m_pMyThread(pMyThread), m_pParentFrame(pParentFrame), m_pDocument(pDocument), m_strProcessTitle(pszProcessTitle), 
     m_iTotalUnits(iTotalUnits), m_iNumThreads(0), m_bDone(false), m_bFail(false), m_bCancelled(false), m_iRunning(0),
-    m_pTimer(NULL), m_bWorkersDeleted(false)
+    m_pTimer(NULL), m_bWorkersDeleted(false), m_bBackgroundManagerAdded(false)
 {
   m_iNumThreads = theApp->getNumberCPU();
   //   ++m_iNumThreads;
@@ -70,12 +70,6 @@ BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxFrame
 
 BackgroundSupervisor::~BackgroundSupervisor()
 {
-#ifdef USE_BKGMGR
-  wxCommandEvent doneEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_REMOVE);
-  doneEvent.SetClientData (this);
-  wxPostEvent (theApp->getBackgroundManager(), doneEvent);
-#endif
-
   m_pDocument->removeBackgroundSupervisor (this);
 
   delete m_pTimer;
@@ -92,12 +86,24 @@ BackgroundSupervisor::deleteWorkers()
     if (m_vecpThreads[i]) 
       m_vecpThreads[i]->Delete(); // send Destroy message to workers
 
-  while (m_iRunning > 0) 
+#ifdef USE_BKGMGR
+  wxCommandEvent doneEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_REMOVE);
+  doneEvent.SetClientData (this);
+  wxPostEvent (theApp->getBackgroundManager(), doneEvent);
+#endif
+
+  while (m_iRunning > 0 || m_bBackgroundManagerAdded) 
     m_pMyThread->Sleep(50);
   
   m_bWorkersDeleted = true;
 }
 
+void
+BackgroundSupervisor::ackRemoveBackgroundManager()
+{
+  m_bBackgroundManagerAdded = false;
+}
+
 bool
 BackgroundSupervisor::start()
 {
@@ -140,7 +146,8 @@ BackgroundSupervisor::start()
 #endif
 
   m_pDocument->addBackgroundSupervisor (this);
-  
+  m_bBackgroundManagerAdded = true;
+
   m_iRunning = m_iNumThreads;
   m_iUnitsDone = 0;