** This is part of the CTSim program
** Copyright (C) 1983-2001 Kevin Rosenberg
**
-** $Id: threadrecon.h,v 1.2 2001/02/22 15:00:20 kevin Exp $
+** $Id: threadrecon.h,v 1.5 2001/02/23 03:28:26 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 {
+private:
+
+public:
+ BackgroundTaskThread();
+
+ virtual wxThread::ExitCode Entry();
+
+ // 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 BackgroundTask : public wxEvtHandler {
+private:
+ bool m_bDone;
+
public:
BackgroundTask()
- : wxEvtHandler()
+ : m_bDone(false), wxEvtHandler()
{}
virtual ~BackgroundTask()
virtual void cancel() = 0;
virtual bool start() = 0;
+ virtual bool testDone() = 0;
+
+ bool isDone() const {return m_bDone;}
+ void setDone() { m_bDone = true; }
};
class Reconstructor;
class ReconstructionThread;
class ProjectionFileView;
+
class ThreadedReconstructor : public BackgroundTask {
private:
DECLARE_DYNAMIC_CLASS(ThreadedReconstructor)
- std::vector<Reconstructor*> m_vecpReconstructor;
std::vector<ImageFile*> m_vecpChildImageFile;
std::vector<ReconstructionThread*> m_vecpThread;
ProjectionFileView* m_pProjView;
volatile int m_iRunning;
volatile unsigned int m_iViewsDone;
volatile unsigned int m_iTotalViews;
- wxCriticalSection m_criticalSection;
+ //wxCriticalSection m_criticalSection;
wxString m_strLabel;
Timer* m_pTimer;
bool m_bCancelled;
bool m_bCancelling;
- bool m_bDone;
public:
ThreadedReconstructor (ProjectionFileView* pProjView,
~ThreadedReconstructor ();
void OnThreadEvent (wxCommandEvent& event);
- bool testDone();
void cancel();
void onDone();
bool start();
bool fail() const {return m_bFail;}
- bool getDone() const {return m_bDone;}
+ bool testDone();
+ void cleanUp();
- ImageFile* getImageFile() const;
+ ImageFile* getImageFile();
DECLARE_EVENT_TABLE()
};
int m_iThread;
public:
- ReconstructionThread (ThreadedReconstructor* pSupervisor, Reconstructor* pReconstructor,
- int iThread, int iStartView, int iNumViews);
+ ReconstructionThread (ThreadedReconstructor* 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* pszBackprojectName);
virtual wxThread::ExitCode Entry(); // thread execution starts here
- // called when the thread exits - whether it terminates normally or is
- // stopped with Delete() (but not when it is Kill()ed!)
- virtual void OnExit();
+ // called when the thread exits - whether it terminates normally or is stopped with Delete()
+ virtual void OnExit();
};
#endif
+
\ No newline at end of file