source symul_lib.tcl; # ladowanie symulatora
# tworzymy graf komunikacyjny (w tym wypadku cykl)
set liczbaWierz 5
set sasiedzi(0) {4 1}
set sasiedzi(1) {0 2}
set sasiedzi(2) {1 3}
set sasiedzi(3) {2 4}
set sasiedzi(4) {3 0}
fiber create $liczbaWierz run
fiber_iterate {
proc run {} {
global id run kom
if {$id==0} {wyslij 1 0}
fiber yield; # oznacza koniec rundy
while {$run} { # zmienna run pozwala zakonczyc dzialanie symulacji!!
if {$kom(0)!=""} {
#set x $kom(0)
set x [czytaj 0]
incr x
wyslij 1 $x
}
fiber yield; # oznacza koniec rundy
}
}
}
Inicjalizacja; # koniecznie trzeba to wywolac!!!
set licznik 0
proc wizualizacja {} {
_puts "--- runda $::licznik ---"; incr ::licznik
fiber_iterate {_puts "$id: $kom0, $kom1"}
}
# ... do tego miejsca mozna wszystko wykonac !!!!!!!!!!!!!
set licznikKom 0; set licznik 0; set_run 0; fiber yield; set_run 1; fiber restart
#fiber_iterate {set id_los [expr round(rand()*10000)]}
_puts ---; fiber_iterate {_puts "$id, $id_los"}
fiber error; # bledy na wierz
fiber yield; runda; wizualizacja; set licznikKom; # kolejne rundy
exit