Added wxWakeUpMainThread, wxMutexGuiEnter, wxMutexGuiLeave,
wxMutexGuiLocker and wxThread_IsMain to assist with dealing with GUI access from non-GUI threads. wxPyOnDemandOutputWindow is now thread safe if non-GUI threads use print, sys.stdout.write, etc. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9590 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -714,20 +714,22 @@ class wxPyOnDemandOutputWindow:
|
||||
self.title = title
|
||||
self.parent = None
|
||||
|
||||
|
||||
def SetParent(self, parent):
|
||||
self.parent = parent
|
||||
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
if self.frame != None:
|
||||
self.frame.Destroy()
|
||||
self.frame = None
|
||||
self.text = None
|
||||
|
||||
|
||||
# this provides the file-like output behaviour
|
||||
# These methods provide the file-like output behaviour.
|
||||
def write(self, str):
|
||||
if not wxThread_IsMain():
|
||||
# Aquire the GUI mutex before making GUI calls. Mutex is released
|
||||
# when locker is deleted a the end of this function.
|
||||
locker = wxMutexGuiLocker()
|
||||
|
||||
if not self.frame:
|
||||
self.frame = wxFrame(self.parent, -1, self.title)
|
||||
self.text = wxTextCtrl(self.frame, -1, "",
|
||||
@@ -737,13 +739,13 @@ class wxPyOnDemandOutputWindow:
|
||||
EVT_CLOSE(self.frame, self.OnCloseWindow)
|
||||
self.text.AppendText(str)
|
||||
|
||||
|
||||
def close(self):
|
||||
if self.frame != None:
|
||||
if not wxThread_IsMain():
|
||||
locker = wxMutexGuiLocker()
|
||||
self.frame.Close()
|
||||
|
||||
|
||||
|
||||
_defRedirect = (wxPlatform == '__WXMSW__')
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user