X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fthreadraster.cpp;h=f1678ce613d79b0dd92416426e8d9e3f43b5b411;hb=d77c9d135405e077047ef3426a54470c144cdd34;hp=837a22fb844a452a4426b1e058a1504893a51995;hpb=edd35e8663bc7abd7b8a02b5cc5ec169a5edc0ac;p=ctsim.git diff --git a/src/threadraster.cpp b/src/threadraster.cpp index 837a22f..f1678ce 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.6 2001/03/04 04:27:55 kevin Exp $ +** $Id: threadraster.cpp,v 1.9 2001/03/05 17:26:46 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 @@ -65,27 +65,27 @@ RasterizerSupervisorThread::RasterizerSupervisorThread (PhantomFileView* pProjVi wxThread::ExitCode RasterizerSupervisorThread::Entry() { - RasterizerSupervisor rasterSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel.c_str()); + RasterizerSupervisor* pRasterSupervisor = new RasterizerSupervisor (this, m_pPhantomView, m_iNX, m_iNY, m_iNSample, m_dViewRatio, m_strLabel.c_str()); - rasterSupervisor.start(); - while (! rasterSupervisor.isDone() && ! rasterSupervisor.fail()) { + pRasterSupervisor->start(); + + while (! pRasterSupervisor->workersDone() && ! pRasterSupervisor->fail() && ! pRasterSupervisor->cancelled()) { Sleep(100); - Yield(); } - if (rasterSupervisor.fail()) + + if (pRasterSupervisor->fail()) { wxString msg ("Error starting Rasterizer supervisor: "); - msg += rasterSupervisor.getFailMessage().c_str(); + msg += pRasterSupervisor->getFailMessage().c_str(); msg += "\n"; wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); eventLog.SetString( msg ); wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event } - while (! rasterSupervisor.workersDeleted()) { - Sleep(50); - rasterSupervisor.ProcessPendingEvents(); - } + if (! pRasterSupervisor->cancelled()) + pRasterSupervisor->onDone(); + pRasterSupervisor->deleteWorkers(); return reinterpret_cast(0); } @@ -109,12 +109,9 @@ RasterizerSupervisor::RasterizerSupervisor (SupervisorThread* pThread, PhantomFi 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() @@ -167,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); } } @@ -210,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);