def main_loop(bar, inputs = None):
# TODO: remove eventinputs again?
#inputs += bar.widget.eventinputs()
if inputs == None:
inputs = global_inputs
global_update = True
def signal_quit(signal, frame):
quit_main_loop()
signal.signal(signal.SIGINT, signal_quit)
signal.signal(signal.SIGTERM, signal_quit)
# main loop
while not core.shutdown_requested() and bar.is_running():
now = time.clock_gettime(time.CLOCK_MONOTONIC)
if bar.widget.maybe_timeout(now):
global_update = True
data_ready = []
if global_update:
painter = bar.painter()
painter.widget(bar.widget)
data_ready = select.select(inputs,[],[], 0.00)[0]
if not data_ready:
#print("REDRAW: " + str(time.clock_gettime(time.CLOCK_MONOTONIC)))
painter.flush()
global_update = False
else:
pass
#print("more data already ready")
if not data_ready:
# wait for new data
next_timeout = now + 360 # wait for at most one hour until the next bar update
to = bar.widget.next_timeout()
if to != None:
next_timeout = min(next_timeout, to)
now = time.clock_gettime(time.CLOCK_MONOTONIC)
next_timeout -= now
next_timeout = max(next_timeout,0.1)
#print("next timeout = " + str(next_timeout))
data_ready = select.select(inputs,[],[], next_timeout)[0]
if core.shutdown_requested():
break
if not data_ready:
pass #print('timeout!')
else:
for x in data_ready:
x.process()
global_update = True
bar.proc.kill()
for i in inputs:
i.kill()
bar.proc.wait()
评论列表
文章目录