浏览代码

Cancel the timer2 timer applied by the camera base class.

Ask Solem 14 年之前
父节点
当前提交
352c3df060
共有 1 个文件被更改,包括 14 次插入1 次删除
  1. 14 1
      celery/events/snapshot.py

+ 14 - 1
celery/events/snapshot.py

@@ -6,6 +6,7 @@ from celery.utils.dispatch import Signal
 
 
 class Polaroid(object):
+    _tref = None
     shutter_signal = Signal(providing_args=("state", ))
 
     def __init__(self, state, freq=1.0, verbose=False):
@@ -14,7 +15,7 @@ class Polaroid(object):
         self.verbose = verbose
 
     def install(self):
-        timer2.apply_interval(self.freq * 1000.0, self.capture)
+        self._tref = timer2.apply_interval(self.freq * 1000.0, self.capture)
 
     def on_shutter(self, state):
         pass
@@ -29,3 +30,15 @@ class Polaroid(object):
 
     def capture(self):
         return self.state.freeze_while(self.shutter)
+
+    def cancel(self):
+        if self._tref:
+            self._tref()
+            self._tref.cancel()
+
+    def __enter__(self):
+        self.install()
+        return self
+
+    def __exit__(self, *exc_info):
+        self.cancel()