public MessageBox
Nathan M. Swan
nathanmswan at gmail.com
Wed Mar 21 17:30:50 PDT 2012
On Wednesday, 21 March 2012 at 19:53:55 UTC, Sean Kelly wrote:
> On Mar 20, 2012, at 8:37 PM, Nathan M. Swan wrote:
>
>> After playing around with making a library with uses threads,
>> I realized it would be nice if there could be multiple
>> inter-thread mailboxes than just one per thread. That way,
>> client code and third-party library code don't interfere with
>> each other.
>
> They shouldn't interfere anyway. The third-party code just has
> to devise a message format that client code won't look for.
> Though if the client discards messages arbitrarily via
> receive((Variant v) {}) then all bets are off.
What about this pseudocode?
Thread1:
spawn Thread2
library sends LibMsg
client sends ClientMsg
Thread2:
client receives ClientMsg
library receives LibMsg
The client will receiveOnly!ClientMsg() and get a MessageMismatch.
With multiple MessageBoxes:
Thread1:
clientmail = new MessageBox
spawn Thread2(libobj, clientmail)
libobj.mb.send(LibMsg)
cleintmail.send(ClientMsg)
Thread2:
clientmail.receive(ClientMsg)
libobj.mb.send(LibMsg)
If you scroll down to the section commented out as "doesn't
work", it would work if my implementation could use MessageBoxes:
https://github.com/carlor/dcaflib/blob/master/buggy/asyncobj.d
As I posted a while back, the concept of a variant message queue
is wonderful and powerful, and the implementation is great. But
the fact that you can't declare "auto mq = new MessageQueue()" is
a gaping whole in an otherwise A+ API.
(A+ as the grade, not the array programming language ;) )
NMS
More information about the Digitalmars-d
mailing list