...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

std.concurrency.receiveってそういうもんじゃねえし

というわけで,頑張った割りに意味なかったらしい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
______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________