** This is part of the CTSim program
** Copyright (C) 1983-2001 Kevin Rosenberg
**
-** $Id: threadrecon.h,v 1.5 2001/02/23 03:28:26 kevin Exp $
+** $Id: threadrecon.h,v 1.6 2001/02/23 18:56:56 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 <wx/progdlg.h>
#include "timer.h"
-// This thread creates a BackgroundTask event handler object
-// The thread is detached and terminates when BackgroundTask terminates
-class BackgroundTaskThread : public wxThread {
+// This thread creates a SupervisorTask event handler object
+// The thread is detached and terminates when SupervisorTask terminates
+class SupervisorTaskThread : public wxThread {
private:
public:
- BackgroundTaskThread();
+ SupervisorTaskThread();
- virtual wxThread::ExitCode Entry();
+ virtual wxThread::ExitCode Entry() = 0;
// called when the thread exits - whether it terminates normally or is stopped with Delete()
virtual void OnExit();
};
-// Pure virtual class for BackgroundTasks that can communication
-// with BackgroundManager
+class ReconstructorSupervisorThread : public SupervisorTaskThread {
+private:
+public:
+};
-class BackgroundTask : public wxEvtHandler {
+
+// Pure virtual class for BackgroundSupervisor that can communication
+// with BackgroundManager via messages
+
+class BackgroundSupervisor : public wxEvtHandler {
private:
bool m_bDone;
public:
- BackgroundTask()
+
+ enum {
+ MSG_BACKGROUND_SUPERVISOR_ADD = 7500, // sends to BackgroundManager and Document
+ MSG_BACKGROUND_SUPERVISOR_REMOVE = 7501, // sends to BackgroundManager and Document
+ MSG_BACKGROUND_SUPERVISOR_UNIT_TICK = 7502, // sends to BackgroundManager for progress bars
+ MSG_BACKGROUND_SUPERVISOR_CANCEL = 7503, // *sent* to Supervisor to cancel process
+
+ MSG_WORKER_THREAD_UNIT_TICK = 7504,
+ MSG_WORKER_THREAD_DONE = 7505,
+ MSG_WORKER_THREAD_FAIL = 7506, // sent by workers when they fail
+ };
+
+ BackgroundSupervisor()
: m_bDone(false), wxEvtHandler()
{}
- virtual ~BackgroundTask()
+ virtual ~BackgroundSupervisor()
{}
virtual void cancel() = 0;
virtual bool start() = 0;
virtual bool testDone() = 0;
+ virtual void OnWorkerFail(wxCommandEvent& event) = 0;
+ virtual void OnWorkerUnitTick(wxCommandEvent& event) = 0;
+ virtual void OnWorkerDone(wxCommandEvent& event) = 0;
bool isDone() const {return m_bDone;}
void setDone() { m_bDone = true; }
class Reconstructor;
class ImageFile;
class ProjectionFileDocument;
-class ReconstructionThread;
+class ReconstructorWorker;
class ProjectionFileView;
-class ThreadedReconstructor : public BackgroundTask {
+class ReconstructorSupervisor : public BackgroundSupervisor {
private:
- DECLARE_DYNAMIC_CLASS(ThreadedReconstructor)
+ DECLARE_DYNAMIC_CLASS(ReconstructorSupervisor)
+ wxCriticalSection m_critsectThreadContainer;
std::vector<ImageFile*> m_vecpChildImageFile;
- std::vector<ReconstructionThread*> m_vecpThread;
+ typedef std::vector<ReconstructorWorker*> ThreadContainer;
+ ThreadContainer m_vecpThread;
ProjectionFileView* m_pProjView;
wxProgressDialog* m_pDialogProgress;
wxGauge* m_pGauge;
-
+
volatile bool m_bFail;
int m_iNumThreads;
const int m_iImageNX;
volatile int m_iRunning;
volatile unsigned int m_iViewsDone;
volatile unsigned int m_iTotalViews;
- //wxCriticalSection m_criticalSection;
wxString m_strLabel;
Timer* m_pTimer;
bool m_bCancelled;
bool m_bCancelling;
public:
- ThreadedReconstructor (ProjectionFileView* pProjView,
+ ReconstructorSupervisor (ProjectionFileView* pProjView,
int iNX, int iNY, const char* pszFilterName, double dFilterParam, const char* pszFilterMethod,
int iZeropad, const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
const char* pszBackprojectName, const char* const pszLabel);
- ThreadedReconstructor ()
- : m_bFail(true), m_iNumThreads(0), m_iImageNX(0), m_iImageNY(0), m_iTotalViews(0), BackgroundTask()
+ ReconstructorSupervisor ()
+ : m_bFail(true), m_iNumThreads(0), m_iImageNX(0), m_iImageNY(0), m_iTotalViews(0),
+ BackgroundSupervisor()
{}
- ~ThreadedReconstructor ();
+ ~ReconstructorSupervisor ();
void OnThreadEvent (wxCommandEvent& event);
void cancel();
bool fail() const {return m_bFail;}
bool testDone();
void cleanUp();
+ virtual void OnWorkerFail(wxCommandEvent& event);
+ virtual void OnWorkerUnitTick(wxCommandEvent& event);
+ virtual void OnWorkerDone(wxCommandEvent& event);
ImageFile* getImageFile();
-class ReconstructionThread : public wxThread {
+class ReconstructorWorker : public wxThread {
private:
- ThreadedReconstructor* m_pSupervisor;
- Reconstructor* m_pReconstructor;
+ ReconstructorSupervisor* m_pSupervisor;
int m_iStartView;
int m_iNumViews;
int m_iThread;
+ ProjectionFileView* m_pProjView;
+ ImageFile* m_pImageFile;
+ const std::string m_strFilterName;
+ const double m_dFilterParam;
+ const std::string m_strFilterMethod;
+ const int m_iZeropad;
+ const std::string m_strFilterGenerationName;
+ const std::string m_strInterpName;
+ const int m_iInterpParam;
+ const std::string m_strBackprojectName;
public:
- ReconstructionThread (ThreadedReconstructor* pSupervisor,
+ ReconstructorWorker (ReconstructorSupervisor* pSupervisor,
ProjectionFileView* pProjFile, ImageFile* pImageFile,
int iThread, int iStartView, int iNumViews,
- const char* pszFilterName, double dFilterParam, const char* pszFilterMethod,
- int iZeropad, const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
+ const char* const pszFilterName, double dFilterParam, const char* const pszFilterMethod,
+ int iZeropad, const char* const pszFilterGenerationName, const char* const pszInterpName, int iInterpParam,
const char* pszBackprojectName);
virtual wxThread::ExitCode Entry(); // thread execution starts here
#endif
-
\ No newline at end of file
+