X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fthreadraster.cpp;h=736bf90b71d1606ec044281b08fcef3c6873ce45;hb=fbe99ce7041eb409981b1fd8e269827daf4ed168;hp=00f89dc103c670901ba203ac60c9b97965407f1a;hpb=432ba2c487a5320352f14bdd2cce008fccef6902;p=ctsim.git diff --git a/src/threadraster.cpp b/src/threadraster.cpp index 00f89dc..736bf90 100644 --- a/src/threadraster.cpp +++ b/src/threadraster.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2001 Kevin Rosenberg ** -** $Id: threadraster.cpp,v 1.1 2001/02/27 03:59:30 kevin Exp $ +** $Id: threadraster.cpp,v 1.10 2001/03/05 19:14:40 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 @@ -25,6 +25,11 @@ ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ + +#if defined(HAVE_CONFIG_H) +#include "config.h" +#endif + #include "wx/wxprec.h" #ifndef WX_PRECOMP @@ -35,15 +40,15 @@ #include "ctsim.h" #include "docs.h" #include "views.h" + + +#ifdef HAVE_WXTHREADS + + #include "threadraster.h" #include "backgroundmgr.h" #include "backgroundsupr.h" -#if defined(HAVE_CONFIG_H) -#include "config.h" -#endif - - ///////////////////////////////////////////////////////////////////// // @@ -53,8 +58,7 @@ RasterizerSupervisorThread::RasterizerSupervisorThread (PhantomFileView* pProjView, int iNX, int iNY, int iNSample, double dViewRatio, const char* const pszLabel) -: m_pPhantomView(pProjView), m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_strLabel(pszLabel), - SupervisorThread() +: SupervisorThread(), m_pPhantomView(pProjView), m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_strLabel(pszLabel) { } @@ -64,10 +68,11 @@ RasterizerSupervisorThread::Entry() RasterizerSupervisor rasterSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel.c_str()); rasterSupervisor.start(); - while (! rasterSupervisor.isDone() && ! rasterSupervisor.fail()) { + + while (! rasterSupervisor.workersDone() && ! rasterSupervisor.fail() && ! rasterSupervisor.cancelled()) { Sleep(100); - Yield(); } + if (rasterSupervisor.fail()) { wxString msg ("Error starting Rasterizer supervisor: "); @@ -78,11 +83,10 @@ RasterizerSupervisorThread::Entry() wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event } - while (! rasterSupervisor.workersDeleted()) { - Sleep(50); - rasterSupervisor.ProcessPendingEvents(); - } - + if (! rasterSupervisor.cancelled()) + rasterSupervisor.onDone(); + rasterSupervisor.deleteWorkers(); + return reinterpret_cast(0); } @@ -100,17 +104,14 @@ RasterizerSupervisorThread::OnExit() RasterizerSupervisor::RasterizerSupervisor (SupervisorThread* pThread, PhantomFileView* pPhantomView, int iNX, int iNY, int iNSample, double dViewRatio, const char* const pszLabel) - : m_pPhantomView(pPhantomView), m_pPhantomDoc(pPhantomView->GetDocument()), - m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_pszLabel(pszLabel), - BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), "Rasterizing", iNX) + : BackgroundSupervisor (pThread, pPhantomView->GetFrame(), pPhantomView->GetDocument(), "Rasterizing", iNX), + m_pPhantomView(pPhantomView), m_pPhantomDoc(pPhantomView->GetDocument()), + m_iNX(iNX), m_iNY(iNY), m_iNSample(iNSample), m_dViewRatio(dViewRatio), m_pszLabel(pszLabel) { m_vecpChildImageFiles.reserve (getNumWorkers()); - for (unsigned int iThread = 0; iThread < getNumWorkers(); iThread++) { + for (int iThread = 0; iThread < getNumWorkers(); iThread++) { m_vecpChildImageFiles[iThread] = new ImageFile; } - - - } RasterizerSupervisor::~RasterizerSupervisor() @@ -135,25 +136,19 @@ RasterizerSupervisor::onDone() wxCriticalSection doneSection; wxCriticalSectionLocker critsect (doneSection); - ImageFileDocument* pImageDoc = theApp->newImageDoc(); - if (! pImageDoc) { - sys_error (ERR_SEVERE, "Unable to create image file"); - return; - } - ImageFile* pImageFile = getImageFile(); - pImageDoc->setImageFile (pImageFile); - if (theApp->getAskDeleteNewDocs()) - pImageDoc->Modify (true); - pImageDoc->UpdateAllViews (NULL); - if (ImageFileView* imageView = pImageDoc->getView()) { - imageView->OnUpdate (imageView, NULL); - imageView->getFrame()->SetFocus(); - imageView->getFrame()->Show(true); - } - *theApp->getLog() << m_pszLabel << "\n"; pImageFile->labelAdd (m_pszLabel, getTimerEnd()); + wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); + wxString msg (m_pszLabel); + msg += "\n"; + eventLog.SetString( msg ); + wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event + + wxCommandEvent newImageEvent (wxEVT_COMMAND_MENU_SELECTED, NEW_IMAGEFILE_EVENT); + newImageEvent.SetClientData (pImageFile); + wxPostEvent (theApp->getMainFrame(), newImageEvent); + setDone(); } @@ -169,7 +164,7 @@ RasterizerSupervisor::getImageFile() int iGlobalCol = 0; for (int iw = 0; iw < getNumWorkers(); iw++) { ImageFileArray childArray = m_vecpChildImageFiles[iw]->getArray(); - for (int iCol = 0; iCol < m_vecpChildImageFiles[iw]->nx(); iCol++) { + for (unsigned int iCol = 0; iCol < m_vecpChildImageFiles[iw]->nx(); iCol++) { memcpy (globalArray[iGlobalCol++], childArray[iCol], iColSize); } } @@ -212,13 +207,12 @@ RasterizerWorker::Entry () #endif break; } - rPhantom.convertToImagefile (*m_pImageFile, m_iNX, m_dViewRatio, m_iNSample, Trace::TRACE_NONE, - iUnit + m_iStartUnit, 1, iUnit); - wxPostEvent (m_pSupervisor, eventProgress); + rPhantom.convertToImagefile (*m_pImageFile, m_iNX, m_dViewRatio, m_iNSample, Trace::TRACE_NONE, iUnit + m_iStartUnit, 1, iUnit); + + m_pSupervisor->onWorkerUnitTick(); } - wxCommandEvent eventDone (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_WORKER_THREAD_DONE); - eventDone.SetInt (m_iThread); // Send back thread# that has finished - wxPostEvent (m_pSupervisor, eventDone); + + m_pSupervisor->onWorkerDone (m_iThread); while (! TestDestroy()) Sleep(100); @@ -230,3 +224,5 @@ void RasterizerWorker::OnExit () { } + +#endif // HAVE_WXTHREADS