X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fdocs.cpp;h=16462d7bb27544ff5cdc8c9e51b6de72ae6d91cb;hp=bb8ec90d973e122046ac32d95cda6c34d7f52bb4;hb=3b09207d7c37bc3d48e331657353123ed2f66ed9;hpb=6480e936da257519dd36840862ac995ca8c374da diff --git a/src/docs.cpp b/src/docs.cpp index bb8ec90..16462d7 100644 --- a/src/docs.cpp +++ b/src/docs.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: docs.cpp,v 1.27 2001/02/23 21:58:31 kevin Exp $ +** $Id: docs.cpp,v 1.28 2001/02/25 06:32:12 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 @@ -149,13 +149,16 @@ ProjectionFileDocument::OnSaveDocument(const wxString& filename) ProjectionFileDocument::~ProjectionFileDocument() { + m_criticalSection.Enter(); for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); - i != m_vecpBackgroundSupervisors.end(); i++) { + i != m_vecpBackgroundSupervisors.end(); i++) BackgroundSupervisor::cancelSupervisor(*i); - } - - while (m_vecpBackgroundSupervisors.size() > 0) - ::wxYield(); + m_criticalSection.Leave(); + + while (m_vecpBackgroundSupervisors.size() > 0) { + ::wxUsleep(50); + ::wxYield(); + } delete m_pProjectionFile; } @@ -177,7 +180,7 @@ ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event) BackgroundSupervisor* pSupervisor = reinterpret_cast(event.GetClientData()); wxASSERT (pSupervisor != NULL); - wxCriticalSectionLocker locker (m_criticalSection); + m_criticalSection.Enter(); bool bFound = false; for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); i != m_vecpBackgroundSupervisors.end(); @@ -187,8 +190,13 @@ ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event) bFound = true; break; } - if (! bFound) + m_criticalSection.Leave(); + + if (! bFound) sys_error (ERR_SEVERE, "Could not find background task [ProjectionFileDocument::removeBackgroundTask"); + + wxCommandEvent ackEvent (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_DOCUMENT_ACK_REMOVE); + wxPostEvent (pSupervisor, ackEvent); } bool