Anlaşılır olsun diye bir çizelge hazırladım. Dikey doğru toplam geçen zamanı temsil ediyor...
http://img846.imageshack.us/img846/7919/spawntest.png
Bir de şu kodu denemelisiniz...
/*
spawnTest.d (10.04.2012)
*/
import core.thread, std.concurrency, std.random;
import std.stdio: writef;
import std.string: format;
void birinci (Tid anaKimlik, shared(Say)* xSay)
{
receive ((int xBekle)
{
send(anaKimlik, format(xBekle, " ms "));/*"Ben (1.) birinciyim ve ",
"%d saniye beklemeliyim!", xBekle));*/
Thread.sleep(dur!"msecs"(xBekle));
});
scope(exit)
{
writef("- birinci() x %d kez girdi/çıktı!\n", ++xSay.birinciyi);
send(anaKimlik, 1);
}
}
void ikinci (Tid anaKimlik, shared(Say)* xSay)
{
receive ((int xBekle)
{
send(anaKimlik, format(xBekle, " ms "));/*"Ben (2.) ikinciyim ve ",
"%d saniye beklemeliyim!", xBekle));*/
Thread.sleep(dur!"msecs"(xBekle));
});
scope (exit)
{
writef("- ikinci() x %d kez girdi/çıktı!\n", ++xSay.ikinciyi);
send(anaKimlik, 2);
}
}
shared struct Say { int birinciyi, ikinciyi; }
void main() {
shared auto say_da_Bakam = Say(); // sayıyorrrr bakam...:)
auto birinciTid = spawn(&birinci, thisTid, &say_da_Bakam);
auto ikinciTid = spawn(&ikinci, thisTid, &say_da_Bakam);
bool flipFlop = true;
int[] rakamlar = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
auto rasgeleOlsun = Random(unpredictableSeed);
while (true)
{/*
foreach (rasgele; randomCover(rakamlar, rasgeleOlsun))
{*/
if(flipFlop)
{
send(birinciTid, uniform(1, 1000)); //rasgele);
receive ((string xDurum)
{
writef(xDurum);
});
flipFlop = false;
} else {
flipFlop = true;
send(ikinciTid, uniform(1, 1000)); //rasgele);
receive ((string xDurum)
{
writef(xDurum);
});
}
final switch (receiveOnly!int())
{
case 1: birinciTid = spawn(&birinci, thisTid, &say_da_Bakam);
break;
case 2: ikinciTid = spawn(&ikinci, thisTid, &say_da_Bakam);
}
//}
}
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]