r600: *** empty log message ***
[ctsim.git] / src / backgroundsupr.cpp
index da2120db352c8b13c0bb3454f653527de7fdce74..129b38fa642482f11ed518daf37e06ef45f7caf2 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2001 Kevin Rosenberg
 **
-**  $Id: backgroundsupr.cpp,v 1.4 2001/02/25 08:43:03 kevin Exp $
+**  $Id: backgroundsupr.cpp,v 1.11 2001/03/04 03:14:47 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
 #include "backgroundsupr.h"
 #include "backgroundmgr.h"
 
-#if defined(HAVE_CONFIG_H)
-#include "config.h"
-#endif
-
+#ifdef HAVE_WXTHREADS
 
 ////////////////////////////////////////////////////////////////////////////
 //
@@ -67,14 +64,14 @@ BackgroundSupervisor::cancelSupervisor (BackgroundSupervisor* pSupervisor)
 }
 
 
-BackgroundSupervisor::BackgroundSupervisor (wxFrame* pParentFrame, wxDocument* pDocument, const char* const pszProcessTitle, int iTotalUnits)
-    : m_pParentFrame(pParentFrame), m_pDocument(pDocument), m_pDialogProgress(NULL), m_strProcessTitle(pszProcessTitle), 
+BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxFrame* pParentFrame, wxDocument* pDocument, const char* const pszProcessTitle, int iTotalUnits)
+    : 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_pTimer(NULL), m_bBackgroundTaskAdded(false), m_bWorkersDeleted(false),
     wxEvtHandler()
 {
   m_iNumThreads = theApp->getNumberCPU();
-  //  ++m_iNumThreads;
+  //   ++m_iNumThreads;
 
   m_vecpThreads.reserve (m_iNumThreads);
   for (int iThread = 0; iThread < m_iNumThreads; iThread++)
@@ -92,12 +89,11 @@ BackgroundSupervisor::~BackgroundSupervisor()
   }
 
   while (m_bBackgroundTaskAdded) {
-    Sleep(50);
+    m_pMyThread->Sleep(50);
     ProcessPendingEvents();
   }
 
   delete m_pTimer;
-  delete m_pDialogProgress;
 }
 
 void
@@ -113,7 +109,7 @@ BackgroundSupervisor::deleteWorkers()
   }
 
   while (m_iRunning > 0) {
-    Sleep(50);
+    m_pMyThread->Sleep(50);
     ProcessPendingEvents();
   }
   m_iRunning = 0;
@@ -125,8 +121,8 @@ BackgroundSupervisor::start()
 {
   int iBaseUnits = m_iTotalUnits / m_iNumThreads;
   int iExtraUnits = m_iTotalUnits % m_iNumThreads;
+  int iStartUnit = 0;
   for (int iThread = 0; iThread < m_iNumThreads; iThread++) {
-    int iStartUnit = iThread * iBaseUnits;
     int iNumUnits = iBaseUnits;
     if (iThread < iExtraUnits)
       ++iNumUnits;
@@ -141,28 +137,24 @@ BackgroundSupervisor::start()
       m_strFailMessage = "Thread creation failed [BackgroundSupervisor]";
       break;
     }
-    m_vecpThreads[iThread]->SetPriority (40);
+   m_vecpThreads[iThread]->SetPriority (40);
+   iStartUnit += iNumUnits;
   }
   if (m_bFail)
     return false;
 
   m_pTimer = new Timer;
   
-  if (! theApp->getUseBackgroundTasks())
-    m_pDialogProgress = new wxProgressDialog (_T("Filtered Backprojection"), _T("Reconstruction Progress"), 
-    m_iTotalUnits, m_pParentFrame, wxPD_CAN_ABORT | wxPD_AUTO_HIDE);
-  else {
-    std::string strLabel (m_strProcessTitle);
-    strLabel += " ";
-    strLabel += m_pParentFrame->GetTitle();
-    wxCommandEvent addTaskEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_ADD);
-    addTaskEvent.SetString (strLabel.c_str());
-    addTaskEvent.SetInt (m_iTotalUnits);
-    addTaskEvent.SetClientData (this);
-    wxPostEvent (theApp->getBackgroundManager(), addTaskEvent);
-    wxPostEvent (m_pDocument, addTaskEvent);
-    m_bBackgroundTaskAdded = true;
-  }
+  std::string strLabel (m_strProcessTitle);
+  strLabel += " ";
+  strLabel += m_pParentFrame->GetTitle();
+  wxCommandEvent addTaskEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_ADD);
+  addTaskEvent.SetString (strLabel.c_str());
+  addTaskEvent.SetInt (m_iTotalUnits);
+  addTaskEvent.SetClientData (this);
+  wxPostEvent (theApp->getBackgroundManager(), addTaskEvent);
+  wxPostEvent (m_pDocument, addTaskEvent);
+  m_bBackgroundTaskAdded = true;
   
   m_iRunning = m_iNumThreads;
   m_iUnitsDone = 0;
@@ -197,17 +189,10 @@ BackgroundSupervisor::OnWorkerUnitTick (wxCommandEvent& event)
       *theApp->getLog() << "Units done: " << static_cast<int>(m_iUnitsDone) <<"\n";
 #endif
     
-    if (m_pDialogProgress) {
-      if (! m_pDialogProgress->Update (m_iUnitsDone - 1)) {
-        wxCommandEvent dummy;
-        OnCancel (dummy);
-      }
-    } else {
-      wxCommandEvent addTaskEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_UNIT_TICK);
-      addTaskEvent.SetInt (m_iUnitsDone - 1);
-      addTaskEvent.SetClientData (this);
-      wxPostEvent (theApp->getBackgroundManager(), addTaskEvent);
-    }
+    wxCommandEvent addTaskEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_UNIT_TICK);
+    addTaskEvent.SetInt (m_iUnitsDone - 1);
+    addTaskEvent.SetClientData (this);
+    wxPostEvent (theApp->getBackgroundManager(), addTaskEvent);
 }
 
 void
@@ -243,3 +228,4 @@ BackgroundSupervisor::OnWorkerFail (wxCommandEvent& event)
   OnCancel(dummy);
 }
 
+#endif // HAVE_WXTHREADS