浏览代码

fixed a bug, now events are correctly removed

Simon Van Mierlo 8 年之前
父节点
当前提交
8b9958fb55

+ 2 - 2
src/python_sccd/python_sccd_runtime/event_queue.py

@@ -14,7 +14,7 @@ class EventQueue(object):
         return not [item for item in self.event_list if not item in self.removed]
     
     def getEarliestTime(self):
-        while not self.isEmpty() and (self.event_list[0] in self.removed):
+        while self.event_list and (self.event_list[0] in self.removed):
             item = heappop(self.event_list)
             self.removed.remove(item)
         try:
@@ -32,7 +32,7 @@ class EventQueue(object):
         self.removed.add(event)
         if len(self.removed) > 100:
             self.event_list = [x for x in self.event_list if x not in self.removed]
-        self.removed = set()
+            self.removed = set()
     
     def pop(self):
         while 1:

+ 2 - 0
src/python_sccd/python_sccd_runtime/statecharts_core.py

@@ -134,6 +134,8 @@ class ObjectManagerBase(object):
             i.addEvent(new_event, time_offset)
         
     def getEarliestEventTime(self):
+        while self.instance_times and self.instance_times[0][0] < self.instance_times[0][1].earliest_event_time:
+            heappop(self.instance_times)
         return min(INFINITY if not self.instance_times else self.instance_times[0][0], self.events.getEarliestTime())
     
     def stepAll(self):