I am creating a basic Python block in GNU Radio Companion which sends a specified number of PDU messages at a desired rate. I will use this block to test a flowgraph I am building.
The block works well, but blocks/hangs until it has finished sending all messages. I would like to implement some code to cause the block to stop when the GRC flow graph is stopped.
I have implemented some code to stop the sending thread when signalled to do so, which works well (I tested by manually setting self.stop_thread to True. However I cannot figure out out to send this signal using GRC / GR.
The structure of my code is shown below. How do I trigger the stop() function in GRC / GR?
class SendMessages(threading.Thread):
def __init__(self, num_messages, send_msg_cb, msg_per_second, stop_thread):
# Inherit all the parameters passed to __init__
super().__init__()
...
self.stop_thread = stop_thread
def run(self):
print(f'Sending {self.num_messages} messages')
if self.stop_thread():
print(f'Stopping thread')
break
...
class blk(gr.basic_block):
def __init__(......):
...
# start SendMessages thread and send self.stop_thread to the new thread with a value of False
# This function never gets called :(
def stop(self):
print(f'Stopping block')
self.stop_thread = True
return True
question from:
https://stackoverflow.com/questions/65952623/stop-gnu-radio-python-block-from-blocking 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…