Help with Concurrency
bertg via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Nov 3 15:16:57 PST 2015
I am having trouble with a simple use of concurrency.
Running the following code I get 3 different tid's, multiple
"sock in" messages printed, but no receives. I am supposed to get
a "received!" for each "sock in", but I am getting hung up on
"receiving...".
Am I misusing or misunderstanding the use of mailboxes?
===
class Connection {
Reactor reactor;
WebSocket webSocket;
this(Reactor r, WebSocket ws)
{
reactor = r;
webSocket = ws;
messageLoop();
}
void messageLoop()
{
std.concurrency.Tid tid = std.concurrency.thisTid();
writeln("tid 1 ~ " ~
to!string(std.concurrency.thisTid()));
writeln("tid 2 ~ " ~
to!string(std.concurrency.thisTid()));
writeln("tid 3 ~ " ~
to!string(std.concurrency.thisTid()));
// deal with websocket messages
spawn(&handleConnectionWebSocket, tid, cast(shared)
webSocket);
// deal with pub/sub
//spawn();
while (true) {
writeln("receiving...");
std.concurrency.receive(
(string msg) {
writeln("conn: received ws message: " ~ msg);
}
);
writeln("received!");
}
}
}
void handleConnectionWebSocket(std.concurrency.Tid caller, shared
WebSocket ws)
{
auto sock = cast(WebSocket) ws;
while (sock.connected) {
writeln("sock in");
auto msgIn = sock.receiveText();
std.concurrency.send(caller, msgIn);
}
}
More information about the Digitalmars-d-learn
mailing list