Jump to page: 1 2
Thread overview
Threads
Nov 19, 2008
DF
Nov 19, 2008
Spacen Jasset
Nov 19, 2008
DF
Nov 19, 2008
Sean Kelly
Nov 19, 2008
DF
Nov 19, 2008
Robert Jacques
Nov 19, 2008
DF
Nov 19, 2008
Robert Jacques
Re: Threads Done!
Nov 19, 2008
DF
Nov 19, 2008
DF
November 19, 2008
/**
 * Testing.
 */
module Test;

import std.thread;
import std.stdio;

class DerivedThread : Thread {

     this() {
         super(&run);
     }

private :
     int run() {
        writefln("Derived thread running.\n" );
	return 0;
     }
}

void main() {
	Thread derived = new DerivedThread();
	derived.start();
}

This code makes no output. Why?
November 19, 2008
DF wrote:
> /**
>  * Testing.
>  */
> module Test;
> 
> import std.thread;
> import std.stdio;
> 
> class DerivedThread : Thread {
> 
>      this() {
>          super(&run);
>      }
> 
> private :
>      int run() {
>         writefln("Derived thread running.\n" );
> 	return 0;
>      }
> }
> 
> void main() {
> 	Thread derived = new DerivedThread();
> 	derived.start();
> }
> 
> This code makes no output. Why?

Not quite sure, but you could try derived.wait() in main to wait for the thread to finish.
November 19, 2008
On Wed, 19 Nov 2008 13:26:32 -0500, DF <deefriend@ymail.com> wrote:

> void main() {
> 	Thread derived = new DerivedThread();
> 	derived.start();
> }

The main thread is exiting before the derived thread runs. This works correctly:
	Thread derived = new DerivedThread();
	derived.start();
	derived.wait;
November 19, 2008
Spacen Jasset Wrote:

> DF wrote:
> > /**
> >  * Testing.
> >  */
> > module Test;
> > 
> > import std.thread;
> > import std.stdio;
> > 
> > class DerivedThread : Thread {
> > 
> >      this() {
> >          super(&run);
> >      }
> > 
> > private :
> >      int run() {
> >         writefln("Derived thread running.\n" );
> > 	return 0;
> >      }
> > }
> > 
> > void main() {
> > 	Thread derived = new DerivedThread();
> > 	derived.start();
> > }
> > 
> > This code makes no output. Why?
> 
> Not quite sure, but you could try derived.wait() in main to wait for the thread to finish.
It won't help. And method wait() is hidden. I'm using D 2.0.
November 19, 2008
Robert Jacques Wrote:

> On Wed, 19 Nov 2008 13:26:32 -0500, DF <deefriend@ymail.com> wrote:
> 
> > void main() {
> > 	Thread derived = new DerivedThread();
> > 	derived.start();
> > }
> 
> The main thread is exiting before the derived thread runs. This works
> correctly:
> 	Thread derived = new DerivedThread();
> 	derived.start();
> 	derived.wait;

You'll get "Error: hidden method called for Test.DerivedThread" if try to use derived.wait.
November 19, 2008
DF Wrote:

> /**
>  * Testing.
>  */
> module Test;
> 
> import std.thread;
> import std.stdio;
> 
> class DerivedThread : Thread {
> 
>      this() {
>          super(&run);
>      }
> 
> private :
>      int run() {
>         writefln("Derived thread running.\n" );
> 	return 0;
>      }
> }
> 
> void main() {
> 	Thread derived = new DerivedThread();
> 	derived.start();
> }
> 
> This code makes no output. Why?

The code above should be changed to:
/**
* Testing.
*/
module Test;

import std.thread;
import std.stdio;

class DerivedThread : Thread {

     this() {
         super(&run);
     }


     int run() {
        writefln("Derived thread running.\n" );
        return 0;
     }
}

void main() {
        Thread derived = new DerivedThread();
        derived.start();
        derived.wait();
}

Now it works thanks.
November 19, 2008
On Wed, 19 Nov 2008 13:33:26 -0500, DF <deefriend@ymail.com> wrote:

> Robert Jacques Wrote:
>
>> On Wed, 19 Nov 2008 13:26:32 -0500, DF <deefriend@ymail.com> wrote:
>>
>> > void main() {
>> > 	Thread derived = new DerivedThread();
>> > 	derived.start();
>> > }
>>
>> The main thread is exiting before the derived thread runs. This works
>> correctly:
>> 	Thread derived = new DerivedThread();
>> 	derived.start();
>> 	derived.wait;
>
> You'll get "Error: hidden method called for Test.DerivedThread" if try to use derived.wait.

This worked on my setup (D 1.035 + Phobos + Windows + Release), which version are you using?
November 19, 2008
DF Wrote:

> DF Wrote:
> 
> > /**
> >  * Testing.
> >  */
> > module Test;
> > 
> > import std.thread;
> > import std.stdio;
> > 
> > class DerivedThread : Thread {
> > 
> >      this() {
> >          super(&run);
> >      }
> > 
> > private :
> >      int run() {
> >         writefln("Derived thread running.\n" );
> > 	return 0;
> >      }
> > }
> > 
> > void main() {
> > 	Thread derived = new DerivedThread();
> > 	derived.start();
> > }
> > 
> > This code makes no output. Why?
> 
> The code above should be changed to:
> /**
> * Testing.
> */
> module Test;
> 
> import std.thread;
> import std.stdio;
> 
> class DerivedThread : Thread {
> 
>      this() {
>          super(&run);
>      }
> 
> 
>      int run() {
>         writefln("Derived thread running.\n" );
>         return 0;
>      }
> }
> 
> void main() {
>         Thread derived = new DerivedThread();
>         derived.start();
>         derived.wait();
> }
> 
> Now it works thanks.

P.S. I'm using Digital Mars D Compiler v2.014
November 19, 2008
DF wrote:
> Spacen Jasset Wrote:
> 
>> DF wrote:
>>> /**
>>>  * Testing.
>>>  */
>>> module Test;
>>>
>>> import std.thread;
>>> import std.stdio;
>>>
>>> class DerivedThread : Thread {
>>>
>>>      this() {
>>>          super(&run);
>>>      }
>>>
>>> private :
>>>      int run() {
>>>         writefln("Derived thread running.\n" );
>>> 	return 0;
>>>      }
>>> }
>>>
>>> void main() {
>>> 	Thread derived = new DerivedThread();
>>> 	derived.start();
>>> }
>>>
>>> This code makes no output. Why?
>> Not quite sure, but you could try derived.wait() in main to wait for the thread to finish.
> It won't help. And method wait() is hidden. I'm using D 2.0.

If you're using D 2.0 then that shouldn't even compile.  In fact, std.thread doesn't exist any longer.  Try:

module Test;

import core.thread;
import std.stdio;

class DerivedThread : Thread {
    this() {
        super(&run);
    }

private:
    void run() {
        writefln( "Derived thread running." );
    }
}

void main() {
    Thread derived = new DerivedThread();
    derived.start();
}

Note that if you set "Thread.isDaemon = true" then you will need to join() the thread to wait for it to complete before the app exits.


Sean
November 19, 2008
Sean Kelly Wrote:

> DF wrote:
> > Spacen Jasset Wrote:
> > 
> >> DF wrote:
> >>> /**
> >>>  * Testing.
> >>>  */
> >>> module Test;
> >>>
> >>> import std.thread;
> >>> import std.stdio;
> >>>
> >>> class DerivedThread : Thread {
> >>>
> >>>      this() {
> >>>          super(&run);
> >>>      }
> >>>
> >>> private :
> >>>      int run() {
> >>>         writefln("Derived thread running.\n" );
> >>> 	return 0;
> >>>      }
> >>> }
> >>>
> >>> void main() {
> >>> 	Thread derived = new DerivedThread();
> >>> 	derived.start();
> >>> }
> >>>
> >>> This code makes no output. Why?
> >> Not quite sure, but you could try derived.wait() in main to wait for the thread to finish.
> > It won't help. And method wait() is hidden. I'm using D 2.0.
> 
> If you're using D 2.0 then that shouldn't even compile.  In fact, std.thread doesn't exist any longer.  Try:
> 
> module Test;
> 
> import core.thread;
> import std.stdio;
> 
> class DerivedThread : Thread {
>      this() {
>          super(&run);
>      }
> 
> private:
>      void run() {
>          writefln( "Derived thread running." );
>      }
> }
> 
> void main() {
>      Thread derived = new DerivedThread();
>      derived.start();
> }
> 
> Note that if you set "Thread.isDaemon = true" then you will need to join() the thread to wait for it to complete before the app exits.
> 
> 
> Sean

That's what I get when I try to compile the code you've posted.

module thread cannot read file 'core\thread.d'
« First   ‹ Prev
1 2