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: Activecat
Subject: Re: [Discuss-gnuradio] Unable to stop the flow graph after calling stop()
Date: Mon, 3 Mar 2014 21:56:49 +0800

Dear gurus,
I got it, thank you very much !

Regards,
Activecat


On Mon, Mar 3, 2014 at 9:11 PM, Martin Braun <address@hidden> wrote:
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
>


_______________________________________________
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]