| Thread overview | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
November 19, 2008 Threads | ||||
|---|---|---|---|---|
| ||||
/**
* 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to DF | 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to DF | 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Spacen Jasset | 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Robert Jacques | 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 Re: Threads Done! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to DF | 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to DF | 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 Re: Threads Done! | ||||
|---|---|---|---|---|
| ||||
Posted in reply to DF | 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to DF | 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 Re: Threads | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | 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'
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply