New event locking.

Removed CVS trash.
  Some compile fixes.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4716 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-11-28 11:45:29 +00:00
parent 0979c96223
commit 16c1f79c04
10 changed files with 81 additions and 36 deletions

View File

@@ -583,12 +583,6 @@ wxEvtHandler::~wxEvtHandler()
bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
{
#if defined(__VISAGECPP__)
wxCriticalSectionLocker locker(m_eventsLocker);
#else
wxCriticalSectionLocker locker(*m_eventsLocker);
#endif
// check that we are really in a child thread
wxASSERT_MSG( !wxThread::IsMain(),
wxT("use ProcessEvent() in main thread") );
@@ -602,6 +596,14 @@ bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
void wxEvtHandler::AddPendingEvent(wxEvent& event)
{
// 1) Add event to list of pending events of this event handler
#if defined(__VISAGECPP__)
wxENTER_CRIT_SECT( m_eventsLocker);
#else
wxENTER_CRIT_SECT( *m_eventsLocker);
#endif
if ( !m_pendingEvents )
m_pendingEvents = new wxList;
@@ -609,6 +611,15 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
m_pendingEvents->Append(event2);
#if defined(__VISAGECPP__)
wxLEAVE_CRIT_SECT( m_eventsLocker);
#else
wxLEAVE_CRIT_SECT( *m_eventsLocker);
#endif
// 2) Add this event handler to list of event handlers that
// have pending events.
wxENTER_CRIT_SECT(*wxPendingEventsLocker);
if ( !wxPendingEvents )
@@ -617,28 +628,49 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
// 3) Inform the system that new pending events are somwehere,
// and that these should be processed in idle time.
wxWakeUpIdle();
}
void wxEvtHandler::ProcessPendingEvents()
{
#if defined(__VISAGECPP__)
wxCRIT_SECT_LOCKER(locker, m_eventsLocker);
wxENTER_CRIT_SECT( m_eventsLocker);
#else
wxCRIT_SECT_LOCKER(locker, *m_eventsLocker);
wxENTER_CRIT_SECT( *m_eventsLocker);
#endif
wxNode *node = m_pendingEvents->First();
wxEvent *event;
while ( node )
{
event = (wxEvent *)node->Data();
wxEvent *event = (wxEvent *)node->Data();
delete node;
// In ProcessEvent, new events might get added and
// we can safely leave the crtical section here.
#if defined(__VISAGECPP__)
wxLEAVE_CRIT_SECT( m_eventsLocker);
#else
wxLEAVE_CRIT_SECT( *m_eventsLocker);
#endif
ProcessEvent(*event);
delete event;
delete node;
#if defined(__VISAGECPP__)
wxENTER_CRIT_SECT( m_eventsLocker);
#else
wxENTER_CRIT_SECT( *m_eventsLocker);
#endif
node = m_pendingEvents->First();
}
#if defined(__VISAGECPP__)
wxLEAVE_CRIT_SECT( m_eventsLocker);
#else
wxLEAVE_CRIT_SECT( *m_eventsLocker);
#endif
}
/*