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 | |
parent | 746a82d41f72b7aa51900de3545bc9322b79ae35 (diff) |
grc: better qt flowgraph shutdown
-rw-r--r-- | grc/blocks/options.block.yml | 2 | ||||
-rw-r--r-- | grc/core/generator/flow_graph.py.mako | 31 | ||||
-rw-r--r-- | grc/gui/Application.py | 2 |
3 files changed, 32 insertions, 3 deletions
diff --git a/grc/blocks/options.block.yml b/grc/blocks/options.block.yml index 89dc25a786..6d1d2d2002 100644 --- a/grc/blocks/options.block.yml +++ b/grc/blocks/options.block.yml @@ -134,13 +134,13 @@ templates: imports: |- from gnuradio import gr from gnuradio.filter import firdes + import signal % if generate_options == 'qt_gui': from PyQt5 import Qt import sys % endif % if generate_options == 'bokeh_gui': import time - import signal import functools from bokeh.client import push_session from bokeh.plotting import curdoc 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 diff --git a/grc/gui/Application.py b/grc/gui/Application.py index f2b4dd40a5..8feaca3de8 100644 --- a/grc/gui/Application.py +++ b/grc/gui/Application.py @@ -719,7 +719,7 @@ class Application(Gtk.Application): elif action == Actions.FLOW_GRAPH_KILL: if page.process: try: - page.process.kill() + page.process.terminate() except OSError: print("could not terminate process: %d" % page.process.pid) |