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:
parent
0979c96223
commit
16c1f79c04
@ -47,22 +47,31 @@
|
||||
void wxAppBase::ProcessPendingEvents()
|
||||
{
|
||||
// ensure that we're the only thread to modify the pending events list
|
||||
wxCRIT_SECT_LOCKER(locker, *wxPendingEventsLocker);
|
||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
||||
|
||||
if ( !wxPendingEvents )
|
||||
{
|
||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||
return;
|
||||
}
|
||||
|
||||
// iterate until the list becomes empty
|
||||
wxNode *node = wxPendingEvents->First();
|
||||
while (node)
|
||||
{
|
||||
wxEvtHandler *handler = (wxEvtHandler *)node->Data();
|
||||
|
||||
handler->ProcessPendingEvents();
|
||||
|
||||
delete node;
|
||||
|
||||
// In ProcessPendingEvents(), new handlers might be add
|
||||
// and we can safely leave the critical section here.
|
||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||
handler->ProcessPendingEvents();
|
||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
||||
|
||||
node = wxPendingEvents->First();
|
||||
}
|
||||
|
||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||
}
|
||||
|
||||
int wxAppBase::OnExit()
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -11,8 +11,10 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "gdk/gdk.h"
|
||||
#include "glib.h"
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <glib.h>
|
||||
|
||||
#include "wx/gsocket.h"
|
||||
#include "wx/unix/gsockunx.h"
|
||||
|
||||
|
@ -26,9 +26,9 @@
|
||||
#include "wx/tooltip.h"
|
||||
#endif
|
||||
|
||||
#include "gdk/gdk.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// idle system
|
||||
|
@ -19,9 +19,9 @@
|
||||
#include "wx/menu.h"
|
||||
#include "wx/intl.h"
|
||||
|
||||
#include "glib.h"
|
||||
#include "gdk/gdk.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include <glib.h>
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include "wx/gtk/win_gtk.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -21,8 +21,8 @@
|
||||
#include "wx/accel.h"
|
||||
#endif // wxUSE_ACCEL
|
||||
|
||||
#include "gdk/gdk.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// idle system
|
||||
|
@ -11,8 +11,10 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "gdk/gdk.h"
|
||||
#include "glib.h"
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <glib.h>
|
||||
|
||||
#include "wx/gsocket.h"
|
||||
#include "wx/unix/gsockunx.h"
|
||||
|
||||
|
@ -26,9 +26,9 @@
|
||||
#include "wx/tooltip.h"
|
||||
#endif
|
||||
|
||||
#include "gdk/gdk.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// idle system
|
||||
|
@ -19,9 +19,9 @@
|
||||
#include "wx/menu.h"
|
||||
#include "wx/intl.h"
|
||||
|
||||
#include "glib.h"
|
||||
#include "gdk/gdk.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include <glib.h>
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include "wx/gtk/win_gtk.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -21,8 +21,8 @@
|
||||
#include "wx/accel.h"
|
||||
#endif // wxUSE_ACCEL
|
||||
|
||||
#include "gdk/gdk.h"
|
||||
#include "gtk/gtk.h"
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// idle system
|
||||
|
Loading…
Reference in New Issue
Block a user