On 05/09/2019 02:54 PM, Albin Stigö
wrote:
Every instance of a block is an instance of the
c++ class but like Nick says all your variables are static and
not member variables. Those need to be declared in the header.
Your two block instances are referring to the same variables and
that's why things get messed up.
"A tour of C++" by Bjarne Stroustrup is a good
refresher on C++.
--Albin
I'm going to suggest, ever-so-gently, that discuss-gnuradio, and Gnu
Radio in general aren't the places for learning C++. There are
forums
already for that.
I'm saying this only because in the 15 years (!!!!) I've been
involved with Gnu Radio, I see an alarming number of cases where the
intrepid Gnu Radio developer actually doesn't have much in the way
of programming experience in the underlying languages used,
and arrives here, nearly-certain that their problem is GR related,
rather than an improper use of the underlying programming language.
My guess is that other specialized-framework environments have the
same issue. Fortunately, most people here are helpful regardless.
But it shouldn't be a growing *expectation*, IMHO.
It looks like you've declared a bunch of static
variables within your block's namespace. Those variables
(including pointers!) will be shared with every instance of
your block. This is Bad News. Those variables should
probably all be declared in the header as class member
variables.
I'm running into a strange issue with a new
flow graph [1] I'm working on that uses a custom
C++ block [2] that I built. The block takes input
samples, performs some DSP, and outputs modified
samples at the same sample rate.
When the flowgraph has a single instance of my
custom block enabled, it works fine. But when I
enable a second instance of the block in a
separate second usage, (think stereo sound, one
per sink channel) it acts very unexpectedly -
output samples are wildly inaccurate and
distorted.
My perception is that the two instances of the
same block seem to be sharing some part of their
memory namespace and as they modify/store
variables they are doing so in some sort of shared
namespace or memory segment.
Is it possible for two blocks to corrupt each
other's memory? I can't think of any other
explanation for the two streams working fine
individually, but when both are enabled at the
same time the output is garbled. I've tried all
sorts of things like tying them to the same source
block, removing the upsampling/downsampling,
adding a delay to one, etc. with no luck.
[1] "Flowgraph with two parallel streams both using
the custom block pq_rails":
https://github.com/regulatre/gr-powerquality/blob/master/examples/streamer.grc
_______________________________________________
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
_______________________________________________