--- a/Beremiz.py Wed Mar 28 21:08:31 2012 +0200
+++ b/Beremiz.py Thu Mar 29 00:14:35 2012 +0200
@@ -284,7 +284,8 @@
dc.DrawBitmap(self._bitmap, 0, 0, True)
-from threading import Lock,Timer
+from threading import Lock,Timer,currentThread
+MainThread = currentThread().ident
REFRESH_PERIOD = 0.1
from time import time as gettime
class LogPseudoFile:
@@ -299,6 +300,7 @@
# to prevent rapid fire on rising log panel
self.rising_timer = 0
self.lock = Lock()
+ self.YieldLock = Lock()
self.RefreshLock = Lock()
self.stack = []
self.LastRefreshTime = gettime()
@@ -313,11 +315,20 @@
self.LastRefreshTimer.cancel()
self.LastRefreshTimer=None
if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
- wx.CallAfter(self._write)
+ self._should_write()
else:
- self.LastRefreshTimer = Timer(REFRESH_PERIOD, wx.CallAfter, [self._write])
+ self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._should_write)
self.LastRefreshTimer.start()
+ def _should_write(self):
+ wx.CallAfter(self._write)
+ if MainThread == currentThread().ident:
+ app = wx.GetApp()
+ if app is not None:
+ if self.YieldLock.acquire(0):
+ app.Yield()
+ self.YieldLock.release()
+
def _write(self):
if self.output :
self.output.Freeze();