1 /*****************************************************************************
5 ** Purpose: Header file for thread reconstructions
6 ** Programmer: Kevin Rosenberg
7 ** Date Started: February 2001
9 ** This is part of the CTSim program
10 ** Copyright (C) 1983-2001 Kevin Rosenberg
12 ** $Id: threadrecon.h,v 1.2 2001/02/22 15:00:20 kevin Exp $
14 ** This program is free software; you can redistribute it and/or modify
15 ** it under the terms of the GNU General Public License (version 2) as
16 ** published by the Free Software Foundation.
18 ** This program is distributed in the hope that it will be useful,
19 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ** GNU General Public License for more details.
23 ** You should have received a copy of the GNU General Public License
24 ** along with this program; if not, write to the Free Software
25 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 ******************************************************************************/
28 #ifndef _THREADRECON_H
29 #define _THREADRECON_H
32 #include <wx/thread.h>
33 #include <wx/progdlg.h>
37 class BackgroundTask : public wxEvtHandler {
43 virtual ~BackgroundTask()
46 virtual void cancel() = 0;
47 virtual bool start() = 0;
52 class ProjectionFileDocument;
53 class ReconstructionThread;
54 class ProjectionFileView;
56 class ThreadedReconstructor : public BackgroundTask {
58 DECLARE_DYNAMIC_CLASS(ThreadedReconstructor)
60 std::vector<Reconstructor*> m_vecpReconstructor;
61 std::vector<ImageFile*> m_vecpChildImageFile;
62 std::vector<ReconstructionThread*> m_vecpThread;
63 ProjectionFileView* m_pProjView;
64 wxProgressDialog* m_pDialogProgress;
67 volatile bool m_bFail;
71 volatile int m_iRunning;
72 volatile unsigned int m_iViewsDone;
73 volatile unsigned int m_iTotalViews;
74 wxCriticalSection m_criticalSection;
82 ThreadedReconstructor (ProjectionFileView* pProjView,
83 int iNX, int iNY, const char* pszFilterName, double dFilterParam, const char* pszFilterMethod,
84 int iZeropad, const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam,
85 const char* pszBackprojectName, const char* const pszLabel);
87 ThreadedReconstructor ()
88 : m_bFail(true), m_iNumThreads(0), m_iImageNX(0), m_iImageNY(0), m_iTotalViews(0), BackgroundTask()
91 ~ThreadedReconstructor ();
93 void OnThreadEvent (wxCommandEvent& event);
99 bool fail() const {return m_bFail;}
100 bool getDone() const {return m_bDone;}
102 ImageFile* getImageFile() const;
104 DECLARE_EVENT_TABLE()
109 class ReconstructionThread : public wxThread {
111 ThreadedReconstructor* m_pSupervisor;
112 Reconstructor* m_pReconstructor;
118 ReconstructionThread (ThreadedReconstructor* pSupervisor, Reconstructor* pReconstructor,
119 int iThread, int iStartView, int iNumViews);
121 virtual wxThread::ExitCode Entry(); // thread execution starts here
123 // called when the thread exits - whether it terminates normally or is
124 // stopped with Delete() (but not when it is Kill()ed!)
125 virtual void OnExit();