graphics/GraphicCommons.py
changeset 877 7e695249be8d
parent 875 a8952b79caec
child 878 37256069baed
equal deleted inserted replaced
876:179d5c455f29 877:7e695249be8d
   306         self.DataConsumers = {}
   306         self.DataConsumers = {}
   307         
   307         
   308         self.LastRefreshTime = gettime()
   308         self.LastRefreshTime = gettime()
   309         self.HasAcquiredLock = False
   309         self.HasAcquiredLock = False
   310         self.AccessLock = Lock()
   310         self.AccessLock = Lock()
       
   311         self.TimerAccessLock = Lock()
   311         
   312         
   312         self.LastRefreshTimer = None
   313         self.LastRefreshTimer = None
   313         
   314         
   314         self.SetDataProducer(producer)
   315         self.SetDataProducer(producer)
   315         
   316         
   316     def __del__(self):
   317     def __del__(self):
   317         self.DataProducer = None
   318         self.DataProducer = None
   318         self.DeleteDataConsumers()
   319         self.DeleteDataConsumers()
   319         self.RefreshTimer.Stop()
   320         if self.LastRefreshTimer is not None:
       
   321             self.LastRefreshTimer.Stop()
   320     
   322     
   321     def SetDataProducer(self, producer):
   323     def SetDataProducer(self, producer):
   322         if self.RegisterTick and self.Debug:
   324         if self.RegisterTick and self.Debug:
   323             if producer is not None:
   325             if producer is not None:
   324                 producer.SubscribeDebugIECVariable("__tick__", self)
   326                 producer.SubscribeDebugIECVariable("__tick__", self)
   372             self.AccessLock.acquire()
   374             self.AccessLock.acquire()
   373             self.HasAcquiredLock = True
   375             self.HasAcquiredLock = True
   374             self.AccessLock.release()
   376             self.AccessLock.release()
   375             self.RefreshNewData()
   377             self.RefreshNewData()
   376         else:
   378         else:
       
   379             self.TimerAccessLock.acquire()
   377             self.LastRefreshTimer = Timer(REFRESH_PERIOD, self.ShouldRefresh)
   380             self.LastRefreshTimer = Timer(REFRESH_PERIOD, self.ShouldRefresh)
   378             self.LastRefreshTimer.start()
   381             self.LastRefreshTimer.start()
       
   382             self.TimerAccessLock.release()
   379     
   383     
   380     def NewDataAvailable(self, *args, **kwargs):
   384     def NewDataAvailable(self, *args, **kwargs):
       
   385         self.TimerAccessLock.acquire()
   381         if self.LastRefreshTimer is not None:
   386         if self.LastRefreshTimer is not None:
   382             self.LastRefreshTimer.cancel()
   387             self.LastRefreshTimer.cancel()
   383             self.LastRefreshTimer=None
   388             self.LastRefreshTimer=None
       
   389         self.TimerAccessLock.release()
   384         if not self.Inhibited:
   390         if not self.Inhibited:
   385             current_time = gettime()
   391             current_time = gettime()
   386             if current_time - self.LastRefreshTime > REFRESH_PERIOD and DEBUG_REFRESH_LOCK.acquire(False):
   392             if current_time - self.LastRefreshTime > REFRESH_PERIOD and DEBUG_REFRESH_LOCK.acquire(False):
   387                 self.AccessLock.acquire()
   393                 self.AccessLock.acquire()
   388                 self.HasAcquiredLock = True
   394                 self.HasAcquiredLock = True
   389                 self.AccessLock.release()
   395                 self.AccessLock.release()
   390                 self.LastRefreshTime = gettime()
   396                 self.LastRefreshTime = gettime()
   391                 self.Inhibit(True)
   397                 self.Inhibit(True)
   392                 wx.CallAfter(self.RefreshViewOnNewData, *args, **kwargs)
   398                 wx.CallAfter(self.RefreshViewOnNewData, *args, **kwargs)
       
   399         elif not self.IsShown() and self.HasAcquiredLock:
       
   400             DebugViewer.RefreshNewData(self)
   393             
   401             
   394     def RefreshViewOnNewData(self, *args, **kwargs):
   402     def RefreshViewOnNewData(self, *args, **kwargs):
   395         if self:
   403         if self:
   396             self.RefreshNewData(*args, **kwargs)
   404             self.RefreshNewData(*args, **kwargs)
       
   405             self.TimerAccessLock.acquire()
   397             self.LastRefreshTimer = Timer(REFRESH_PERIOD, self.ShouldRefresh)
   406             self.LastRefreshTimer = Timer(REFRESH_PERIOD, self.ShouldRefresh)
   398             self.LastRefreshTimer.start()
   407             self.LastRefreshTimer.start()
       
   408             self.TimerAccessLock.release()
   399     
   409     
   400     def RefreshNewData(self, *args, **kwargs):
   410     def RefreshNewData(self, *args, **kwargs):
   401         self.Inhibit(False)
   411         self.Inhibit(False)
   402         self.AccessLock.acquire()
   412         self.AccessLock.acquire()
   403         if self.HasAcquiredLock:
   413         if self.HasAcquiredLock: