** This is part of the CTSim program
** Copyright (C) 1983-2001 Kevin Rosenberg
**
-** $Id: backgroundsupr.cpp,v 1.2 2001/02/25 07:36:26 kevin Exp $
+** $Id: backgroundsupr.cpp,v 1.3 2001/02/25 08:00:57 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
BackgroundSupervisor::~BackgroundSupervisor()
{
+ for (int i = 0; i < m_iNumThreads; i++)
+ if (m_vecpThreads[i]) {
+ m_vecpThreads[i]->Delete(); // sends Destroy message to workers
+ }
+
+ while (m_iRunning > 0) {
+ Sleep(50);
+ ProcessPendingEvents();
+ }
+
if (m_bBackgroundTaskAdded) {
wxCommandEvent doneEvent (wxEVT_COMMAND_MENU_SELECTED, MSG_BACKGROUND_SUPERVISOR_REMOVE);
doneEvent.SetClientData (this);
delete m_pDialogProgress;
}
-void
-BackgroundSupervisor::deleteAnyWorkers()
-{
- m_critsectThreadContainer.Enter();
- for (int i = 0; i < m_iNumThreads; i++)
- if (m_vecpThreads[i]) {
- m_vecpThreads[i]->Delete(); // sends Destroy message to workers
- }
- m_critsectThreadContainer.Leave();
-
- while (m_iRunning > 0) {
- Sleep(50);
- ProcessPendingEvents();
- }
-}
-
-
bool
BackgroundSupervisor::start()
{
BackgroundSupervisor::OnCancel(wxCommandEvent& event)
{
m_bCancelled = true;
- deleteAnyWorkers();
m_bDone = true;
}
{
m_iRunning--;
wxASSERT (m_iRunning >= 0);
- m_critsectThreadContainer.Enter();
- m_vecpThreads[event.GetInt()] = NULL;
- m_critsectThreadContainer.Leave();
#ifdef DEBUG
if (theApp->getVerboseLogging()) {
BackgroundSupervisor::OnWorkerFail (wxCommandEvent& event)
{
m_iRunning--;
- m_critsectThreadContainer.Enter();
- m_vecpThreads[event.GetInt()] = NULL;
- m_critsectThreadContainer.Leave();
wxCommandEvent eventLog( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT );
eventLog.SetString( event.GetString() );
wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event
- onDone();
+ wxCommandEvent dummy;
+ OnCancel(dummy);
}