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