Hello,

I'm having some problems wrapping my head around shared classes and whatnot. So my application has a Logger class, which basically just writes formatted messages to a target, of which debugGLLogger inherits. What debugGLLogger does is simple in theory: it supplies a callback function to OpenGL, and said callback function uses a logger to write debug messages coming from OpenGL to.

First off, I can't control the fact that it's a callback function, or when it is called, as this is done by the driver, windowing system, and so on.

Hence, to know which logger I need to write to, I used a static variable which gets set to my main logger for OpenGL.

In theory, this should work, as I'm currently (or so I thought) not using concurrency, which means that the static variable should exist in all cases.

However, apparently the callback function is possibly called from a different thread which I have no control over, as I've had to painfully discover. My mainLogger static variable is useless, and everything falls apart. I'm not sure where this thread comes from, and maybe I'm just imagining things, but since I see no other way the variable could suddenly become null, I'm guessing that's the issue.

So in some way I've got to bring the "shared" keyword into play, so I have a reference to a logger instance which I can use across threads. However, apparently for that, the class also needs to be shared, and I'm not sure if that's even the "right" way to do things.

I've also thought that maybe I should utilise a seperate thread to run all loggers in, and communicate with the loggers through message-passing.

I'm not an experienced programmer, so I'd love to hear some advice on how I could solve this.

Reply via email to