diff options
author | Bastian Bloessl <mail@bastibl.net> | 2019-06-18 09:26:46 +0200 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-06-19 13:00:00 -0700 |
commit | 0cc238fbb298c3acaed8f3c048d7a51bfa876fd1 (patch) | |
tree | 46872fa93c682a9b3457ab4a5324a8feec0d0c1c /grc/core/generator | |
parent | 746a82d41f72b7aa51900de3545bc9322b79ae35 (diff) |
grc: better qt flowgraph shutdown
Diffstat (limited to 'grc/core/generator')
-rw-r--r-- | grc/core/generator/flow_graph.py.mako | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/grc/core/generator/flow_graph.py.mako b/grc/core/generator/flow_graph.py.mako index 291b89f0a6..9b2e8478c0 100644 --- a/grc/core/generator/flow_graph.py.mako +++ b/grc/core/generator/flow_graph.py.mako @@ -352,6 +352,16 @@ def main(top_block_cls=${class_name}, options=None): % endif tb.show() + def sig_handler(sig=None, frame=None): + Qt.QApplication.quit() + + signal.signal(signal.SIGINT, sig_handler) + signal.signal(signal.SIGTERM, sig_handler) + + timer = Qt.QTimer() + timer.start(500) + timer.timeout.connect(lambda: None) + def quitting(): tb.stop() tb.wait() @@ -395,6 +405,20 @@ def main(top_block_cls=${class_name}, options=None): serverProc.kill() % elif generate_options == 'no_gui': tb = top_block_cls(${ ', '.join(params_eq_list) }) + + def sig_handler(sig=None, frame=None): + % for m in monitors: + % if m.params['en'].get_value() == 'True': + tb.${m.name}.stop() + % endif + % endfor + tb.stop() + tb.wait() + sys.exit(0) + + signal.signal(signal.SIGINT, sig_handler) + signal.signal(signal.SIGTERM, sig_handler) + % if flow_graph.get_option('run_options') == 'prompt': tb.start(${ flow_graph.get_option('max_nouts') or '' }) % for m in monitors: @@ -409,13 +433,18 @@ def main(top_block_cls=${class_name}, options=None): tb.stop() % elif flow_graph.get_option('run_options') == 'run': tb.start(${flow_graph.get_option('max_nouts') or ''}) - % endif % for m in monitors: % if m.params['en'].get_value() == 'True': tb.${m.name}.start() % endif % endfor + % endif tb.wait() + % for m in monitors: + % if m.params['en'].get_value() == 'True': + tb.${m.name}.stop() + % endif + % endfor % endif |