X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fbackgroundsupr.h;h=f1591651915dc56d431ddef6c1c7449f5af2e031;hp=b77b99700ced312fcd467bf3a44eac23dd6c7837;hb=f7ee98f7d964ed361068179f0e7ea4475ed1abdf;hpb=f1e69bf8888b1462007c93c8d6bf3ae1e0ecec20 diff --git a/src/backgroundsupr.h b/src/backgroundsupr.h index b77b997..f159165 100644 --- a/src/backgroundsupr.h +++ b/src/backgroundsupr.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2001 Kevin Rosenberg ** -** $Id: backgroundsupr.h,v 1.5 2001/02/26 17:36:56 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 @@ -46,37 +46,35 @@ public: }; -// Pure virtual class for BackgroundSupervisor that can communication -// with BackgroundManager via messages +// Pure virtual class for BackgroundSupervisor that can communication with BackgroundManager via messages class BackgroundWorkerThread; +class BackgroundProcessingDocument; class BackgroundSupervisor : public wxEvtHandler { private: DECLARE_DYNAMIC_CLASS(BackgroundSupervisor) - + SupervisorThread* m_pMyThread; - wxFrame* m_pParentFrame; - wxDocument* m_pDocument; - const std::string m_strProcessTitle; - wxProgressDialog* m_pDialogProgress; + wxWindow* m_pParentFrame; + BackgroundProcessingDocument* m_pDocument; + const wxString m_strProcessTitle; - volatile bool m_bFail; - std::string m_strFailMessage; + const unsigned int m_iTotalUnits; int m_iNumThreads; + volatile bool m_bDone; + volatile bool m_bFail; + wxString m_strFailMessage; + volatile bool m_bCancelled; volatile int m_iRunning; - unsigned int m_iUnitsDone; - const unsigned int m_iTotalUnits; - bool m_bCancelled; - bool m_bDone; + volatile unsigned int m_iUnitsDone; Timer* m_pTimer; - bool m_bBackgroundTaskAdded; - bool m_bWorkersDeleted; + volatile bool m_bWorkersDeleted; + volatile bool m_bBackgroundManagerAdded; typedef std::vector ThreadContainer; ThreadContainer m_vecpThreads; wxCriticalSection m_critsectThreads; - public: enum { MSG_BACKGROUND_SUPERVISOR_ADD = 7500, // sends to BackgroundManager and Document @@ -90,11 +88,11 @@ public: MSG_WORKER_THREAD_FAIL = 7507, // sent by workers when they fail }; - BackgroundSupervisor (SupervisorThread* pMyThread, wxFrame* pParentFrame, wxDocument* pDocument, const char* const pszProcessTitle, + BackgroundSupervisor (SupervisorThread* pMyThread, wxWindow* pParentFrame, BackgroundProcessingDocument* pDocument, wxChar const* pszProcessTitle, int iTotalUnits); BackgroundSupervisor () - : m_iTotalUnits(0), wxEvtHandler() + : wxEvtHandler(), m_iTotalUnits(0) {} virtual ~BackgroundSupervisor(); @@ -104,25 +102,26 @@ public: bool start(); virtual void onDone() {}; - - virtual void OnWorkerFail(wxCommandEvent& event); - virtual void OnWorkerUnitTick(wxCommandEvent& event); - virtual void OnWorkerDone(wxCommandEvent& event); - virtual void OnCancel(wxCommandEvent& event); - virtual void OnAckDocumentRemove(wxCommandEvent& event); + + virtual void onCancel(); + + virtual void onWorkerFail(int iThread, const wxString& strFailMessage); + virtual void onWorkerUnitTick(); + virtual void onWorkerDone(int iThread); void deleteWorkers(); + void ackRemoveBackgroundManager(); + bool workersDone() const { return m_iRunning == 0; } bool workersDeleted() const { return m_bWorkersDeleted; } bool isDone() const {return m_bDone;} void setDone() { m_bDone = true; } bool fail() const {return m_bFail;} - const std::string& getFailMessage() const { return m_strFailMessage; } + const wxString& getFailMessage() const { return m_strFailMessage; } + bool cancelled() const {return m_bCancelled;} int getNumWorkers() const { return m_iNumThreads; } double getTimerEnd() { return m_pTimer->timerEnd(); } - static void cancelSupervisor (BackgroundSupervisor* pSupervisor); - DECLARE_EVENT_TABLE() }; @@ -130,14 +129,13 @@ public: class BackgroundWorkerThread : public wxThread { protected: BackgroundSupervisor* m_pSupervisor; + const int m_iThread; const int m_iStartUnit; const int m_iNumUnits; - const int m_iThread; public: BackgroundWorkerThread (BackgroundSupervisor* pSupervisor, int iThread, int iStartUnit, int iNumUnits) - : m_pSupervisor(pSupervisor), m_iThread(iThread), m_iStartUnit(iStartUnit), m_iNumUnits(iNumUnits), - wxThread (wxTHREAD_DETACHED) + : wxThread (wxTHREAD_DETACHED), m_pSupervisor(pSupervisor), m_iThread(iThread), m_iStartUnit(iStartUnit), m_iNumUnits(iNumUnits) {} };