** 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
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())
{
wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
}
- while (! projSupervisor.workersDeleted()) {
- Sleep(50);
- projSupervisor.ProcessPendingEvents();
- }
+ if (! projSupervisor.cancelled())
+ projSupervisor.onDone();
+ projSupervisor.deleteWorkers();
- return reinterpret_cast<wxThread::ExitCode>(0);
+ return static_cast<wxThread::ExitCode>(0);
}
void
{
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
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())