r580: no message
[ctsim.git] / src / backgroundsupr.cpp
index 2b8c0491cd2f034111f014d8a77d95701c750aa5..04af1d6cb858a41681bfa77f1ecd53c184636fd9 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2001 Kevin Rosenberg
 **
-**  $Id: backgroundsupr.cpp,v 1.2 2001/02/25 07:36:26 kevin Exp $
+**  $Id: backgroundsupr.cpp,v 1.3 2001/02/25 08:00:57 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
@@ -84,6 +84,16 @@ BackgroundSupervisor::BackgroundSupervisor (wxFrame* pParentFrame, wxDocument* p
 
 BackgroundSupervisor::~BackgroundSupervisor()
 {
+  for (int i = 0; i < m_iNumThreads; i++) 
+    if (m_vecpThreads[i]) {
+      m_vecpThreads[i]->Delete(); // sends Destroy message to workers
+  }
+
+  while (m_iRunning > 0) {
+    Sleep(50);
+    ProcessPendingEvents();
+  }
+
   if (m_bBackgroundTaskAdded) {
     wxCommandEvent doneEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_REMOVE);
     doneEvent.SetClientData (this);
@@ -100,23 +110,6 @@ BackgroundSupervisor::~BackgroundSupervisor()
   delete m_pDialogProgress;
 }
 
-void
-BackgroundSupervisor::deleteAnyWorkers()
-{
-  m_critsectThreadContainer.Enter();  
-  for (int i = 0; i < m_iNumThreads; i++) 
-    if (m_vecpThreads[i]) {
-      m_vecpThreads[i]->Delete(); // sends Destroy message to workers
-  }
-  m_critsectThreadContainer.Leave();
-
-  while (m_iRunning > 0) {
-    Sleep(50);
-    ProcessPendingEvents();
-  }
-}
-
-
 bool
 BackgroundSupervisor::start()
 {
@@ -174,7 +167,6 @@ void
 BackgroundSupervisor::OnCancel(wxCommandEvent& event)
 {
   m_bCancelled = true;
-  deleteAnyWorkers();
   m_bDone = true;
 }
 
@@ -212,9 +204,6 @@ BackgroundSupervisor::OnWorkerDone (wxCommandEvent& event)
 {
   m_iRunning--;
   wxASSERT (m_iRunning >= 0);
-  m_critsectThreadContainer.Enter();
-  m_vecpThreads[event.GetInt()] = NULL;
-  m_critsectThreadContainer.Leave();
 
 #ifdef DEBUG
   if (theApp->getVerboseLogging()) {
@@ -233,13 +222,11 @@ void
 BackgroundSupervisor::OnWorkerFail (wxCommandEvent& event)
 {
   m_iRunning--;
-  m_critsectThreadContainer.Enter();
-  m_vecpThreads[event.GetInt()] = NULL;
-  m_critsectThreadContainer.Leave();
   wxCommandEvent eventLog( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
   eventLog.SetString( event.GetString() );
   wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
 
-  onDone();
+  wxCommandEvent dummy;
+  OnCancel(dummy);
 }