Do threads 'end' themselves using core.thread?

Ali Çehreli acehreli at yahoo.com
Mon Jul 22 09:15:16 PDT 2013


On 07/22/2013 08:32 AM, Alex Horvat wrote:
> On Sunday, 21 July 2013 at 15:30:06 UTC, Ali Çehreli wrote:
>> On 07/20/2013 09:43 PM, Ali Çehreli wrote:
>>
>> > When the parent thread terminates the child processes
>> terminate as well.
>>
>> I am wrong there: What I said above is true for the main program
>> thread. When the main program terminates, its threads are terminated
>> as well.
>>
>> Otherwise, a child can continue running even though its parent (owner)
>> has terminated. This is evidenced by the fact that std.concurrency has
>> an exception named OwnerTerminated, useful for the child.
>>
>> Ali
>
> Thanks again, but I feel I need to give more details - what I really
> want to know is if what I'm doing will cause a memory leak by leaving a
> child thread going - the parent thread won't exit until the program is
> closed.
>
> The program is loading a video onto a gtkOverlay widget, then overlaying
> a label to display the name of the video. Once the label is displayed a
> thread is created, which waits 3 seconds then hides the label. After
> creating the thread the parent thread has nothing more to do with it.
>
> I've included a bit more code below:
>
> private Label _lblTitle;
>
> public void LoadVideo()
> {
>    //Setting up video here....
>
>    _lblTitle.setText("example");
>    _lblTitle.show();
>
>    //Spawn a new thread to hide the title
>    Thread TitleHider = new Thread(&DelayedHideTitle);
>    TitleHider.start();
>
>    //Keep going on main thread...
> }
>
> private void DelayedHideTitle()
> {
>    Thread.sleep(dur!"seconds"(3));
>    _lblTitle.hide();
> }
>
> DelayedHideTitle() is the entire contents of the child thread, after the
> method finishes does the thread TitleHider dispose of itself?

Unfortunately, I don't know enough to answer these questions. :(

pthread_create man page says: "Only when a terminated joinable thread 
has been joined are the last of its resources released back to the 
system.  When a detached thread terminates, its resources are auto- 
matically released back to the system:"

Apparently, it is possible to detach from a thread or even to start it 
in the detached state to begin with: "By default, a new thread is 
created in a joinable state, unless attr was set to create the thread in 
a detached state (using pthread_attr_setdetachstate(3))." But 
core.thread doesn't seem to provide either of those.

Ali



More information about the Digitalmars-d-learn mailing list