From 190d12960af991304da22bbec5522eea0e438689 Mon Sep 17 00:00:00 2001 From: Wolfgang Draxinger Date: Fri, 2 Dec 2011 18:17:56 +0100 Subject: other scratchpad --- scratchpad.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 scratchpad.py (limited to 'scratchpad.py') diff --git a/scratchpad.py b/scratchpad.py new file mode 100644 index 0000000..4154651 --- /dev/null +++ b/scratchpad.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +import Queue +import threading + +class Action: + EXECUTING = 0 + FINISHED = 1 + ABORTED = 2 + def execute(self): + self.aborted = False + self.do_execute() + + def ended(self): + if self.aborted: + return True + return do_ended() + + def abort(self): + self.do_abort() + self.aborted = True + + def do_execute(): + raise NotImplementedError + + def do_abort(): + raise NotImplementedError + + def do_ended(): + raise NotImplementedError + + +class ActionMotion(Action): + def __init__(self, axes, target, speed = None): + if len(axes) != len(target): + raise ValueError() + if speed and len(speed) != len(axes): + raise ValueError() + + self.axes = axes + self.target_position = target + self.motion_speed = speed + + def do_execute(self): + for i, axis enumerate(self.axes): + if self.speed: + axis. + +class ActionExecuter(threading.Thread) + def __init__(self, action): + self.action = action + + def start(self): + import threading, weakref + self.running = True + self.worker_thread = threading.Thread(target=ActionExecuter.run, args=(weakref.proxy(self),)) + + def abort(self): + self.running = False + self.worker_thread.join() + + def run(self): + action = self.action + try: + action.execute() + except ReferenceError: + action.abort() + + +class MotionControl(object): + def __init__(self, name): + self.name = name + self.active = True + self.worker_thread = threading.Thread(target = self.workerLoop, name = "MotionControl.worker_thread") + self.worker_thread.setDaemon(True) + self.worker_thread.start() + + def __del__(self): + + def workerLoop(self): + import time + while self.active: + print self.name + time.sleep(1) + -- cgit v1.2.3