というわけで,頑張った割りに意味なかったらしいorz
receiveに複数のdelegateを与えたら分岐するんだね.
via. http://www.curoles.com/j/dstdconcur.html
import std.stdio; import std.concurrency; struct A { int v; } void test() { for(bool fun = true; fun; ) { receive( (int i) { writeln(i); }, (char c){ writeln(c); }, (A a){ writeln(a.v); }, (bool b){ writeln("terminate"); fun = b; }); } } void main() { Tid tid = spawn(&test); send(tid, 100); send(tid, 'c'); send(tid, A(99)); send(tid, false); foreach (i; 0..1000) write("_"); // スレッドの動作確認のためしばらく実行しておく }
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________100 _c _99 _terminate ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________