wm withdraw .; wm geom .output 348x512+20+15; wm geom .konsola 588x675+382+15 ##nagelfar syntax fiber_iterate c ##nagelfar syntax fiber_eval x c ##nagelfar syntax iterate n x c ##nagelfar syntax iterate1 n x c ##nagelfar syntax fiber s x* ##nagelfar subcmd fiber create yield error ##nagelfar syntax wyslij e x ##nagelfar syntax czytaj e ## cykl NIEzorient, demonstracja, 12.2023 # + w tym alg nie ma znaczenia ze cykl jest niezorient !!! # + sa tu deklaracje dla nagelfar # source symul_lib.tcl; # ladowanie symulatora source symul_graf_lib.tcl # tworzymy graf komunikacyjny (w tym wypadku cykl) set liczbaWierz 7 set sasiedzi(0) {6 1} set sasiedzi(1) {0 2} #set sasiedzi(2) {1 3} set sasiedzi(2) {3 1} set sasiedzi(3) {2 4} set sasiedzi(4) {3 5} set sasiedzi(5) {4 6} set sasiedzi(6) {5 0} fiber create $liczbaWierz run fiber_iterate { proc run {} { global id id_los run kom0 kom1 if {$id==0 || $id==1} { wyslij 0 "$id_los 0"; wyslij 1 "$id_los 0" } fiber yield; # oznacza koniec rundy while {$run} { # zmienna run pozwala zakonczyc dzialanie symulacji!! while {$kom0!=""} { lassign [czytaj 0] x0 x1 incr x1 wyslij 1 "$x0 $x1" } while {$kom1!=""} { lassign [czytaj 1] x0 x1 incr x1 wyslij 0 "$x0 $x1" } fiber yield; # oznacza koniec rundy } } } Inicjalizacja; # koniecznie trzeba to wywolac!!! proc wizualizacja {} { _puts "---" fiber_iterate {_puts "$id, $id_los: $kom0, $kom1"} } G::rysujGraf; wm geom .t 234x513+12+26 # !!! do tego miejsca mozna wszystko wykonac !!!!!!!!!!!!!!!!!! fiber error #fiber restart #.output.t delete 1.0 end; # czyszczenie output #set_run 0; fiber yield; set_run 1; fiber restart #fiber_iterate {set id_los [expr round(rand()*10000)]} fiber yield; runda; wizualizacja exit