On Tuesday, 12 February 2013 at 10:08:14 UTC, FG wrote:
On 2013-02-12 07:58, monarch_dodra wrote:
I think I didn't explain myself very well. I have my single "master" thread which has a "thread-global" mailbox, but I have 3 different objects that are
sharing that mailbox.

OK, I finally get what you are saying.
You need to create a mailbox and a unique tid for every Manager (and probably would have to change Manager into a class). Unfortunately this won't work out of the box, as for example receiveOnly and friends use only the default mailbox of the current thread.

    struct Manager
    {
        Tid tid;
        MessageBox mbox;
        this(string s)
        {
            this.mbox = new MessageBox
            tid = Tid(new Mailbox);
            spawn(&worker, s, tid);
        }
        string get()
        {
            // you'd have to rewrite receive to use custom mbox
            return tid.myReceiveOnly!string();
        }
    }

Hum, I'll have to try to play around with that. For one thing, "MessageBox" is private.

Good news is my manager is already a class.

As for the re-implement of receive to work on a custom Tid, maybe it might be better to forget about the tid, and implement it on directly on the mailbox? Something like this:

//----
struct Manager
{
    MessageBox mbox;
    this(string s)
    {
        this.mbox = new MessageBox
        Tid managerTid = Tid(new Mailbox);
        spawn(&worker, s, managerTid);
    }
    string get()
    {
        // you'd have to rewrite receive to use custom mbox
        return mbox.receiveOnly!string();
        //Or just straight up:
        mbox.get();
    }
}
//----

I don't know, I'll try and see how it goes.

Reply via email to