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 <active...@gmail.com> >> 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 >>> <mar...@hostalia.de> 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 >>>>>> <martin.br...@ettus.com> 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 Discuss-gnuradio@gnu.org >>>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org >>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>>>> >>>> >>>> _______________________________________________ >>>> Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org >>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>> >>> >>> >>> _______________________________________________ Discuss-gnuradio >>> mailing list Discuss-gnuradio@gnu.org >>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>> > > _______________________________________________ > Discuss-gnuradio mailing list > Discuss-gnuradio@gnu.org > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio