wm withdraw .; wm geo .output 379x366+15+15; wm geo .konsola 766x626+414+15; 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