X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fbackgroundsupr.cpp;h=f9b328f848248bd20b362512dc05f15b388cd53e;hb=9df4442f0783f3aade89d4520a873164141fd012;hp=18dde621d4dc40c94643e3f33681d88a67d2ddf4;hpb=de6d2bb3861af7568006e1a02d5dddc730644b01;p=ctsim.git diff --git a/src/backgroundsupr.cpp b/src/backgroundsupr.cpp index 18dde62..f9b328f 100644 --- a/src/backgroundsupr.cpp +++ b/src/backgroundsupr.cpp @@ -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$ ** ** 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 @@ -31,6 +31,9 @@ #include "wx/wx.h" #endif +// pragma line required for Fedora 4 and wxWin 2.4.2 +#pragma implementation "timer.h" + #include "ct.h" #include "ctsim.h" #include "docs.h" @@ -54,15 +57,15 @@ END_EVENT_TABLE() -BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxFrame* pParentFrame, BackgroundProcessingDocument* pDocument, const char* const pszProcessTitle, int iTotalUnits) +BackgroundSupervisor::BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* 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; - m_vecpThreads.reserve (m_iNumThreads); + m_vecpThreads.resize (m_iNumThreads); for (int iThread = 0; iThread < m_iNumThreads; iThread++) m_vecpThreads[iThread] = NULL; @@ -70,12 +73,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 +89,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 +149,8 @@ BackgroundSupervisor::start() #endif m_pDocument->addBackgroundSupervisor (this); - + m_bBackgroundManagerAdded = true; + m_iRunning = m_iNumThreads; m_iUnitsDone = 0;