X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fthreadproj.cpp;h=f967269df76a1a7b23fe64e64737569247c4ec55;hb=a65971e957a117618b33070897f11a4116f38e1f;hp=b2d169f11ef77c5964f772fb801879a6d6e0d1f1;hpb=e98a8a9d72a7b919debbbc9d1b0f237fe71c0fb3;p=ctsim.git diff --git a/src/threadproj.cpp b/src/threadproj.cpp index b2d169f..f967269 100644 --- a/src/threadproj.cpp +++ b/src/threadproj.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2001 Kevin Rosenberg ** -** $Id: threadproj.cpp,v 1.12 2001/03/04 04:30:45 kevin Exp $ +** $Id: threadproj.cpp,v 1.15 2001/03/07 21:18:50 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 @@ -70,9 +70,8 @@ ProjectorSupervisorThread::Entry() m_strGeometry.c_str(), m_iNSample, m_dRotation, m_dFocalLength, m_dCenterDetectorLength, m_dViewRatio, m_dScanRatio, m_strLabel.c_str()); projSupervisor.start(); - while (! projSupervisor.isDone() && ! projSupervisor.fail()) { + while (! projSupervisor.workersDone() && ! projSupervisor.fail() && ! projSupervisor.cancelled()) { Sleep(100); - Yield(); } if (projSupervisor.fail()) { @@ -84,12 +83,11 @@ ProjectorSupervisorThread::Entry() wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event } - while (! projSupervisor.workersDeleted()) { - Sleep(50); - projSupervisor.ProcessPendingEvents(); - } + if (! projSupervisor.cancelled()) + projSupervisor.onDone(); + projSupervisor.deleteWorkers(); - return reinterpret_cast(0); + return static_cast(0); } void @@ -220,12 +218,12 @@ ProjectorWorker::Entry () { const Phantom& rPhantom = m_pPhantomView->GetDocument()->getPhantom(); bool bFail = m_pScanner->fail(); - wxString failMsg; + std::string failMsg; if (bFail) { failMsg = "Unable to make Projector: "; failMsg += m_pScanner->failMessage().c_str(); wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); - event.SetString( failMsg ); + event.SetString( failMsg.c_str() ); wxPostEvent( theApp->getMainFrame(), event ); } else @@ -245,19 +243,14 @@ ProjectorWorker::Entry () break; } m_pScanner->collectProjections (*m_pProjections, rPhantom, iUnit + m_iStartUnit, 1, iUnit, Trace::TRACE_NONE); - wxPostEvent (m_pSupervisor, eventProgress); + m_pSupervisor->onWorkerUnitTick(); } } if (bFail) { - wxCommandEvent eventFail (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_WORKER_THREAD_FAIL); - eventFail.SetInt (m_iThread); // Send back thread# that has finished - eventFail.SetString (failMsg); - wxPostEvent (m_pSupervisor, eventFail); + m_pSupervisor->onWorkerFail (m_iThread, failMsg); } else { - 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())