On 06/23/2012 09:05 AM, Minas Mina wrote:
> I am using a secondary thread to send messages to it so it can print
> those messages.

> std.concurrency.OwnerTerminated@std/concurrency.d(248): Owner terminated

The OwnerTerminated exception is thrown when a worker attempts to receive a message to notify it about the fact that its owner has been terminated.

There are ways to deal with the situation:

- The worker can catch this particular exception

- The worker can catch this exception as a message

- The owner can send a special YouAreDone :) message to the worker so it no longer attempts to receive messages and exits gracefully

- More?

Here is the second method as described in TDPL's concurrency chapter, which is available online:

  http://www.informit.com/articles/article.aspx?p=1609144

void writer()
{
    bool done = false;

    while( !done )
    {
        receive(
            (Tid id, int i)
            {
                writeln("Secondary thread: ", i);
            },

            (OwnerTerminated exc) // <----- as a message
            {
                done = true;
            }
        );
    }
}

Ali

--
D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html

Reply via email to