discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Unable to stop the flow graph after calling stop(


From: Martin Braun
Subject: Re: [Discuss-gnuradio] Unable to stop the flow graph after calling stop()
Date: Mon, 03 Mar 2014 14:11:33 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0

On 03/03/2014 12:37 PM, Marcus Müller wrote:
> Hi Activecat,
> 
> as Miklos wrote: Let your Constructor throw an exception.
> For a little detail on that, refer to
> http://www.parashift.com/c++-faq-lite/ctors-can-throw.html .
> You can surround your block construction with a try{}catch-clause, and
> handle your error, so your application may deal with that gracefully
> (instead of just dying).

Also, grep for throw in the impl files for an example, we do that a lot
in GNU Radio.

M

> Another common method of dealing with stuff like this is, if you
> really have complex constructor arguments and might need to check if
> they make sense in multiple places
> - let your class have a static method validate_arguments(...) that
> returns true or false,
> - let your c'tor call that and throw an exception when it's false, and
> - use that unbound method (that is calling
> activecats_class::validate_arguments() rather than calling
> instance_of_that_class.validate_arguments()) from wherever you want to
> calculate arguments.
> 
> Greetings,
> Marcus
> 
> On 03.03.2014 12:02, Miklos Maroti wrote:
>> Dear Activecat,
> 
>> Throw an exception. It will kill the application.
> 
>> Miklos
> 
>> On Mon, Mar 3, 2014 at 11:57 AM, Activecat <address@hidden>
>> wrote:
>>> Dear Marcus,
>>>
>>> Says, the constructor performed some basic checking on the
>>> constructor arguments, then had found some fatal error (says,
>>> division by zero) and decided to ban the flowgraph from being
>>> executed.
>>>
>>> A workaround is to get the constructor to set a class variable to
>>> false, says, d_valid = false;
>>>
>>> then in the work() it will check this d_valid as follows:
>>>
>>> int work() { if ( ! d_valid ) return -1 ......... .........
>>> (other stuff as usual) }
>>>
>>>
>>> But isn't there a better way to do this ..? (to ban the flowgraph
>>> from being executed within the constructor)
>>>
>>> Please advise, thanks.
>>>
>>> Regards, Activecat
>>>
>>>
>>>
>>> On Mon, Mar 3, 2014 at 5:25 PM, Marcus Müller
>>> <address@hidden> wrote:
>>>>
>> Activecat,
> 
>> the constructor of a block must have been called before the block
>> has been connect()ed; so there's no way a flowgraph is already
>> running when your block's constructor is called.
> 
>> Greetings, Marcus
> 
>> On 03.03.2014 06:53, Activecat wrote:
>>>>>> Dear Sir, Thank you very much.
>>>>>>
>>>>>> What if, we want to stop the flow graph in the constructor
>>>>>> of a block?
>>>>>>
>>>>>> In work() we can just return -1. But in constructor, what
>>>>>> value should be returned, also -1  ?
>>>>>>
>>>>>> Regards, Activecat
>>>>>>
>>>>>>
>>>>>> On Sun, Feb 2, 2014 at 9:05 PM, Martin Braun 
>>>>>> <address@hidden> wrote:
>>>>>>
>>>>>>> On 01.02.2014 13:51, Activecat wrote:
>>>>>>>
>>>>>>>> But the function stop() fails to work. The flow graph
>>>>>>>> continue executing infinitely...
>>>>>>>>
>>>>>>>> Question: How to stop the flow graph when
>>>>>>>> this->d_complete == true ?
>>>>>>>>
>>>>>>>
>>>>>>> Return -1 (or WORK_DONE) in your work() function.
>>>>>>>
>>>>>>> MB
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Discuss-gnuradio mailing list address@hidden 
>>>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Discuss-gnuradio mailing list address@hidden 
>>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>>>>
>>>>
>>>> _______________________________________________ 
>>>> Discuss-gnuradio mailing list address@hidden 
>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>
>>>
>>>
>>> _______________________________________________ Discuss-gnuradio
>>> mailing list address@hidden 
>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>
> 
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]