improve processing
This commit is contained in:
parent
cd5e042768
commit
c92ded42ba
@ -151,8 +151,10 @@ class fenrirManager():
|
||||
self.environment['runtime']['eventManager'].putToEventQueue(fenrirEventType.ExecuteCommand, self.command)
|
||||
self.command = ''
|
||||
def shutdownRequest(self):
|
||||
self.environment['runtime']['eventManager'].stopMainEventLoop()
|
||||
|
||||
try:
|
||||
self.environment['runtime']['eventManager'].stopMainEventLoop()
|
||||
except:
|
||||
pass
|
||||
def captureSignal(self, siginit, frame):
|
||||
self.shutdownRequest()
|
||||
|
||||
@ -161,8 +163,11 @@ class fenrirManager():
|
||||
self.environment['runtime']['outputManager'].presentText(_("Quit Fenrir"), soundIcon='ScreenReaderOff', interrupt=True)
|
||||
self.environment['runtime']['eventManager'].cleanEventQueue()
|
||||
self.environment['runtime']['eventManager'].stopMainEventLoop(True)
|
||||
time.sleep(1)
|
||||
for currManager in self.environment['general']['managerList']:
|
||||
if self.environment['runtime'][currManager]:
|
||||
self.environment['runtime'][currManager].shutdown()
|
||||
del self.environment['runtime'][currManager]
|
||||
|
||||
self.environment = None
|
||||
|
||||
|
@ -11,8 +11,8 @@ generalData = {
|
||||
'tutorialMode': False,
|
||||
'currUser':'',
|
||||
'prevUser':'',
|
||||
'managerList':['processManager','eventManager','punctuationManager','cursorManager','applicationManager','commandManager'
|
||||
,'screenManager','inputManager','outputManager','helpManager','debug'],
|
||||
'managerList':['processManager','punctuationManager','cursorManager','applicationManager','commandManager'
|
||||
,'screenManager','inputManager','outputManager','helpManager','eventManager','debug'],
|
||||
'commandFolderList':['commands','onInput', 'onCursorChange', 'onScreenUpdate','onScreenChanged','onHeartBeat', 'onPlugInputDevice'
|
||||
,'onApplicationChange','onSwitchApplicationProfile','help',],
|
||||
}
|
||||
|
@ -19,23 +19,22 @@ class processManager():
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
self.running = self.env['runtime']['eventManager'].getMainLoopRunning()
|
||||
self.addSimpleEventThread(fenrirEventType.HeartBeat, self.heartBeatTimer, multiprocess=False)
|
||||
self.addSimpleEventThread(fenrirEventType.HeartBeat, self.heartBeatTimer, multiprocess=True)
|
||||
def shutdown(self):
|
||||
self.terminateAllProcesses()
|
||||
|
||||
def terminateAllProcesses(self):
|
||||
for proc in self._Processes:
|
||||
try:
|
||||
proc.terminate()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
def heartBeatTimer(self, active):
|
||||
try:
|
||||
time.sleep(0.5)
|
||||
except:
|
||||
pass
|
||||
return time.time()
|
||||
def terminateAllProcesses(self):
|
||||
time.sleep(1)
|
||||
for proc in self._Processes:
|
||||
try:
|
||||
proc.terminate()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def addCustomEventThread(self, function, pargs = None, multiprocess = False, runOnce = False):
|
||||
eventQueue = self.env['runtime']['eventManager'].getEventQueue()
|
||||
if multiprocess:
|
||||
@ -50,7 +49,7 @@ class processManager():
|
||||
if multiprocess:
|
||||
t = Process(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
||||
self._Processes.append(t)
|
||||
else:# thread not implemented yet
|
||||
else:
|
||||
t = Thread(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
||||
self._Threads.append(t)
|
||||
t.start()
|
||||
@ -67,7 +66,7 @@ class processManager():
|
||||
else:
|
||||
function(self.running, eventQueue)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.env['runtime']['debug'].writeDebugOut('processManager:customEventWorkerThread:function():' + str(e),debug.debugLevel.ERROR)
|
||||
if runOnce:
|
||||
break
|
||||
|
||||
|
@ -61,12 +61,10 @@ class driver():
|
||||
monitor = pyudev.Monitor.from_netlink(context)
|
||||
monitor.filter_by(subsystem='input')
|
||||
monitor.start()
|
||||
while active:
|
||||
while active.value == 1:
|
||||
devices = monitor.poll(2)
|
||||
if devices:
|
||||
eventQueue.put({"Type":fenrirEventType.PlugInputDevice,"Data":''})
|
||||
|
||||
#self.env['runtime']['settingsManager'].getSettingAsFloat('screen', 'screenUpdateDelay')
|
||||
return time.time()
|
||||
def plugInputDeviceWatchdogTimer(self, active):
|
||||
time.sleep(2.5)
|
||||
@ -75,24 +73,26 @@ class driver():
|
||||
if not self._initialized:
|
||||
return
|
||||
def inputWatchdog(self,active , params):
|
||||
deviceFd = []
|
||||
print('WD:',params['dev'],self.watchDog.value == 0)
|
||||
while self.watchDog.value == 0:
|
||||
if active.value == 0:
|
||||
return
|
||||
r = []
|
||||
while r == []:
|
||||
deviceFd = list(params['dev'])
|
||||
r, w, x = select(deviceFd, [], [], 2)
|
||||
print('select',r, w, x)
|
||||
self.watchDog.value = 0
|
||||
try:
|
||||
deviceFd = []
|
||||
while self.watchDog.value == 0:
|
||||
if active.value == 0:
|
||||
return
|
||||
r = []
|
||||
while r == []:
|
||||
if active.value == 0:
|
||||
return
|
||||
deviceFd = list(params['dev'])
|
||||
r, w, x = select(deviceFd, [], [], 2)
|
||||
self.watchDog.value = 0
|
||||
except:
|
||||
pass
|
||||
def getInputEvent(self):
|
||||
if not self.hasIDevices():
|
||||
self.watchDog.value = 1
|
||||
return None
|
||||
event = None
|
||||
r, w, x = select(self.iDevices, [], [], 0.00001)
|
||||
print(self.iDevices,'read',r, w, x)
|
||||
if r != []:
|
||||
for fd in r:
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user