wm geom .konsola 593x640+738+5; wm geom .output 330x636+394+5; wm withdraw .; source ~/tcl/111/dodatki2_kons.tcl; # model CONGEST w sciezce... 07.10.2024 # + sciezka dl=y, ilosc danych=b; czas= y+b ? # source symul_lib.tcl; # ladowanie symulatora source symul_graf_lib.tcl; # wizu set liczbaWierz 4 set sasiedzi(0) {1} set sasiedzi(1) {0 2} set sasiedzi(2) {1 3} set sasiedzi(3) {2} fiber create $liczbaWierz { while {$run} { if {$id==0} { if {$li!=""} {wyslij 0 [pobierz li]} } elseif {$id==$liczbaWierz-1} { if {$kom0!=""} {dolacz li [czytaj 0]} } else { if {$kom0!=""} {dolacz li [czytaj 0]} if {$li!=""} {wyslij 1 [pobierz li]} } fiber yield } } Inicjalizacja fiber_iterate { proc dolacz {li_ w} { upvar $li_ li lappend li $w } proc pobierz {li_} { upvar $li_ li set r [lindex $li 0] set li [lrange $li 1 end] return $r } } proc wizualizacja {} { _puts "--- $::licznik_rund"; incr ::licznik_rund fiber_iterate { if {$id==0} { _puts "$id, , $kom0; li=$li" } elseif {$id==$liczbaWierz-1} { _puts "$id, $kom0, ; li=$li" } else { _puts "$id, $kom0, $kom1; li=$li" } } } # !!! do tego miejsca mozna wszystko wykonac !!!!!!!!!!!!!!!!!! set_run 0; fiber yield; runda; set_run 1; fiber delete; set licznikKom 0 # usuwanie fiberow set_run 0; fiber yield; runda; set_run 1; fiber restart; set licznikKom 0 # restart kodu fiberow fiber error G::rysujGraf; after idle {wm geom .t 181x494+23+6} if 1 { fiber_eval 0 {set li {1 2 3 4 5 6 7}} fiber_eval 1 {set li {}} #fiber_eval 2 {set li {8 9 10 11}} fiber_eval 2 {set li {}} fiber_eval 3 {set li {}} .output.t delete 1.0 end set licznik_rund 0; wizualizacja } # + ile rund wymaga zgromadzenie danych w ostat. wierz? # |li(0)|=7, sc. dlu=3, => 10 rund # |li(0)|=7, |li(2)|=4, sc. dlu=3, => 12 rund fiber yield; runda; wizualizacja exit