V Tue, 13 Jan 2015 13:56:05 +0000
tcak via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
napsáno:

> On Tuesday, 13 January 2015 at 13:53:11 UTC, tcak wrote:
> > I have written the following code:
> >
> > test.d
> > ==============================
> > import core.thread;
> > import std.stdio;
> >
> > void threadFunc(){
> >     writeln("Thread func");
> > }
> >
> > public static this(){
> >     auto t = new Thread( &threadFunc );
> >     t.start();
> >
> >     writeln("Static init");
> > }
> >
> > void main(){
> >      writeln("End of main");
> > }
> >
> >
> > run
> > ======================
> > rdmd test.d
> >
> >
> > result
> > ======================
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Static init
> > Thread func
> > Sta...
> >
> > Is this normal, what's happening?
> 
> When I defined static init with shared
> 
> public shared static this()
> 
> it works normal now. But it doesn't explain above issue. What's 
> the relation between a new thread and a module's initialiser?

I am not sure but my guess is

static this needs to be called before anything else in module so when
you try call threadFunc it looks if static this has been called and
finished which is not true so it call it again

Reply via email to