Beremiz.py
changeset 881 68ac754a5a72
parent 875 a8952b79caec
child 900 3e78925125e1
equal deleted inserted replaced
880:781ced3c0aef 881:68ac754a5a72
   194         # to prevent rapid fire on rising log panel
   194         # to prevent rapid fire on rising log panel
   195         self.rising_timer = 0
   195         self.rising_timer = 0
   196         self.lock = Lock()
   196         self.lock = Lock()
   197         self.YieldLock = Lock()
   197         self.YieldLock = Lock()
   198         self.RefreshLock = Lock()
   198         self.RefreshLock = Lock()
       
   199         self.TimerAccessLock = Lock()
   199         self.stack = []
   200         self.stack = []
   200         self.LastRefreshTime = gettime()
   201         self.LastRefreshTime = gettime()
   201         self.LastRefreshTimer = None
   202         self.LastRefreshTimer = None
   202 
   203 
   203     def write(self, s, style = None):
   204     def write(self, s, style = None):
   204         if self.lock.acquire():
   205         if self.lock.acquire():
   205             self.stack.append((s,style))
   206             self.stack.append((s,style))
   206             self.lock.release()
   207             self.lock.release()
   207             current_time = gettime()
   208             current_time = gettime()
       
   209             self.TimerAccessLock.acquire()
   208             if self.LastRefreshTimer:
   210             if self.LastRefreshTimer:
   209                 self.LastRefreshTimer.cancel()
   211                 self.LastRefreshTimer.cancel()
   210                 self.LastRefreshTimer=None
   212                 self.LastRefreshTimer=None
       
   213             self.TimerAccessLock.release()
   211             if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
   214             if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
   212                 self._should_write()
   215                 self._should_write()
   213             else:
   216             else:
       
   217                 self.TimerAccessLock.acquire()
   214                 self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
   218                 self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
   215                 self.LastRefreshTimer.start()
   219                 self.LastRefreshTimer.start()
       
   220                 self.TimerAccessLock.release()
   216 
   221 
   217     def _timer_expired(self):
   222     def _timer_expired(self):
   218         if self.RefreshLock.acquire(False):
   223         if self.RefreshLock.acquire(False):
   219             self._should_write()
   224             self._should_write()
   220         else:
   225         else:
       
   226             self.TimerAccessLock.acquire()
   221             self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
   227             self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
   222             self.LastRefreshTimer.start()
   228             self.LastRefreshTimer.start()
       
   229             self.TimerAccessLock.release()
   223 
   230 
   224     def _should_write(self):
   231     def _should_write(self):
   225         wx.CallAfter(self._write)
   232         wx.CallAfter(self._write)
   226         if MainThread == currentThread().ident:
   233         if MainThread == currentThread().ident:
   227             app = wx.GetApp()
   234             app = wx.GetApp()