Spawn threads and receive/send

Luis Panadero Guardeño luis.panadero at gmail.com
Sun Apr 15 03:03:03 PDT 2012


Auto response :

the main thread ends, and It signal func to end, so It never receive 
any message from clock. I fix it, doing that main sleep 1000 seconds 
after sending func Tid to clock

Luis Panadero Guardeño wrote:

> I'm trying to implement a clock thread that sends messages and get
> blocked when the message queue it's full.
> 
> So I try this:
> void func() {
>   int n;
>   while (1) {
>     receive( (int i) { writeln(n, " : Received the number ", i); 
n++;}
> );
>   }
> }
> 
> void clock() {
>   receive((Tid tid) {
>     while (1) {
>       writeln("sending...");
>       send(tid, 42);
>       Thread.sleep(dur!"msecs"(1000));
>       
>     }
>   });
> }
> 
> void main() {
>   auto tid = spawn(&func);
>   setMaxMailboxSize(tid, 1, OnCrowding.block);
>   auto clock = spawn(&clock);
>   send(clock, tid);
> 
> }
> 
> I get a screen full of "sending..." but func never receive any 
message.
> But when I try this in main() :
> void main() {
>   auto tid = spawn(&func);
>   setMaxMailboxSize(tid, 1, OnCrowding.block);
>   while (1) {
>     Thread.sleep(dur!"msecs"(1000));
>     writeln("sending...");
>     send(tid, 42); // Receive the result code.
>   }
>   //auto clock = spawn(&clock);
>   //send(clock, tid);
> }
> 
> It works and I get "sending..." and received pairs on screen.
> 
> Why is hapening this ?
> 
> Note: I try it with dmd 2.059 x64 and gdmd 4.6.3
> 
-- 
I'm afraid that I have a blog: http://zardoz.es 


More information about the Digitalmars-d-learn mailing list