Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
January 07, 2008 Thread issue | ||||
---|---|---|---|---|
| ||||
Hi, I try to make a client/server application but i have issues with threads. import std.thread; import std.socket; import std.stdio; class Class1 { Thread listeningThread; Socket listeningSocket; this() { listeningThread = new Thread(&Listen); listeningThread.start(); } int Listen() { listeningSocket = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP); writefln("socket created\n"); return (0); } } void main() { auto class1 = new Class1(); } The results is a "Error: Unable to create socket" I know its normal because my program quit imediatly but when the thread is destroyed it wouldn't make an error. I know objects are destroyed by the GC in any order so i tried the manual method : import std.thread; import std.socket; import std.stdio; class Class1 { Thread listeningThread; Socket listeningSocket; this() { listeningThread = new Thread(&Listen); listeningThread.start(); } ~this() { delete listeningThread; } int Listen() { listeningSocket = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP); writefln("socket created\n"); return (0); } } void main() { auto class1 = new Class1(); } But it does the same error. Can you help me please? |
January 07, 2008 Re: Thread issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Raynor | Raynor wrote:
> Hi, I try to make a client/server application but i have issues with threads.
>
> import std.thread;
> import std.socket;
> import std.stdio;
>
> class Class1
> {
> Thread listeningThread;
> Socket listeningSocket;
>
> this()
> {
> listeningThread = new Thread(&Listen);
> listeningThread.start();
listeningThread.wait();
Try adding this. Phobos applications doesn't bother to wait for executing threads before terminating.
Sean
|
January 09, 2008 Re: Thread issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | Sean Kelly a écrit :
> Raynor wrote:
>> Hi, I try to make a client/server application but i have issues with threads.
>>
>> import std.thread;
>> import std.socket;
>> import std.stdio;
>>
>> class Class1
>> {
>> Thread listeningThread;
>> Socket listeningSocket;
>>
>> this()
>> {
>> listeningThread = new Thread(&Listen);
>> listeningThread.start();
> listeningThread.wait();
>
>
> Try adding this. Phobos applications doesn't bother to wait for executing threads before terminating.
>
>
> Sean
If i add listeningThread.wait();, my application is blocked.
|
January 09, 2008 Re: Thread issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Raynor | Raynor wrote:
> Sean Kelly a écrit :
>> Raynor wrote:
>>> Hi, I try to make a client/server application but i have issues with threads.
>>>
>>> import std.thread;
>>> import std.socket;
>>> import std.stdio;
>>>
>>> class Class1
>>> {
>>> Thread listeningThread;
>>> Socket listeningSocket;
>>>
>>> this()
>>> {
>>> listeningThread = new Thread(&Listen);
>>> listeningThread.start();
>> listeningThread.wait();
>>
>>
>> Try adding this. Phobos applications doesn't bother to wait for executing threads before terminating.
>
> If i add listeningThread.wait();, my application is blocked.
If you don't wait for the thread then your application will leave main and exit, possibly without the thread ever running. This isn't the case in Tango however, as it has daemon and non-daemon threads, much like Java.
Sean
|
January 09, 2008 Re: Thread issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | Sean Kelly a écrit :
> Raynor wrote:
>> Sean Kelly a écrit :
>>> Raynor wrote:
>>>> Hi, I try to make a client/server application but i have issues with threads.
>>>>
>>>> import std.thread;
>>>> import std.socket;
>>>> import std.stdio;
>>>>
>>>> class Class1
>>>> {
>>>> Thread listeningThread;
>>>> Socket listeningSocket;
>>>>
>>>> this()
>>>> {
>>>> listeningThread = new Thread(&Listen);
>>>> listeningThread.start();
>>> listeningThread.wait();
>>>
>>>
>>> Try adding this. Phobos applications doesn't bother to wait for executing threads before terminating.
>>
>> If i add listeningThread.wait();, my application is blocked.
>
> If you don't wait for the thread then your application will leave main and exit, possibly without the thread ever running. This isn't the case in Tango however, as it has daemon and non-daemon threads, much like Java.
>
>
> Sean
class Class1
{
Thread listeningThread;
Socket listeningSocket;
this()
{
listeningThread = new Thread(&Listen);
listeningThread.start();
listeningThread.wait(100);
}
int Listen()
{
listeningSocket = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP);
writefln("socket created\n");
return (0);
}
}
void main()
{
auto class1 = new Class1();
}
It works with listeningThread.wait(100). I dont understand why it makes an error if the application quit without the thread ever running. If the thread never run, normaly it woudn't throw a socket error.
|
Copyright © 1999-2021 by the D Language Foundation