Strange exception using threads
Ali Çehreli
acehreli at yahoo.com
Sat Jun 23 09:29:50 PDT 2012
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 at 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
More information about the Digitalmars-d-learn
mailing list