From 171ed4983235abd6eab5e6dfbe42a153b121292a Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sun, 31 Mar 2013 17:35:59 -0400 Subject: [PATCH] simplify test2 --- testApp/test.db | 2 ++ testApp/test2.py | 61 ++++++++++++++++++------------------------------ 2 files changed, 25 insertions(+), 38 deletions(-) diff --git a/testApp/test.db b/testApp/test.db index c685b8c..ad4ac5b 100644 --- a/testApp/test.db +++ b/testApp/test.db @@ -8,11 +8,13 @@ record(longin, "$(P)li:cnt") { record(longin, "$(P)val:a") { field(DTYP, "Python Device") field(INP , "@test2 AAAA") + field(SCAN, "I/O Intr") } record(longin, "$(P)val:b") { field(DTYP, "Python Device") field(INP , "@test2 AAAA") + field(SCAN, "I/O Intr") } record(waveform, "$(P)wf") { diff --git a/testApp/test2.py b/testApp/test2.py index 5a1622b..421fe02 100644 --- a/testApp/test2.py +++ b/testApp/test2.py @@ -2,64 +2,49 @@ import weakref import threading, time from devsup.hooks import addHook +from devsup.db import IOScanListThread +from devsup.util import StoppableThread insts = {} def done(obj): print obj,'Expires' -class Driver(threading.Thread): +class Driver(StoppableThread): def __init__(self, name): super(Driver,self).__init__() self.name = name - self._lock = threading.Lock() - self._recs = set() - self._run = True - self._stop = threading.Event() + self.scan = IOScanListThread() self.value = 0 addHook('AfterIocRunning', self.start) - addHook('AtIocExit', self.stop) - - def stop(self): - print 'Stopping driver',self.name - with self._lock: - self._run = False - self._stop.wait() - print 'Finished with',self.value - - def addrec(self, rec): - with self._lock: - self._recs.add(rec) - def delrec(self, rec): - with self._lock: - self._recs.remove(rec) + addHook('AtIocExit', self.join) def run(self): try: - while self._run: + while self.shouldRun(): time.sleep(1.0) - with self._lock: - val = self.value - self.value += 1 - for R in self._recs: - R.record.scan(sync=True, reason=val) + + val = self.value + self.value += 1 + self.scan.interrupt(reason=val) finally: - self._stop.set() + self.finish() def addDrv(name): print 'Create driver',name insts[name] = Driver(name) class Device(object): - def __init__(self, rec, drv): - self.driver, self.record = drv, rec - self.driver.addrec(self) - def detach(self, rec): - self.driver.delrec(self) - def process(self, rec, data): - if data is not None: - self.VAL = data + def __init__(self, rec, args): + self.driver, self.record = insts[args], rec + self.allowScan = self.driver.scan.add -def build(rec, args): - drv = insts[args] - return Device(rec, drv) + def detach(self, rec): + print 'detach',rec + + def process(self, rec, data): + print 'test2 Update',rec,data + if data is not None: + rec.VAL = data + +build = Device