No registered users in community Materiały
in last 10 minutes
in last 10 minutes
ALR - rozszerzenia symulatora
Jak dodać "wagi krawędzi" do symulatora?
# (wykonać to w konsoli po utworzeniu fiberów!) proc ustaw_wagi {} { global sasiedzi liczbaWierz waga iterate i $liczbaWierz { set ww {} foreach s $sasiedzi($i) { if {[info exists waga($i,$s)]} { set w $waga($i,$s) } elseif {[info exists waga($s,$i)]} { set w $waga($s,$i) } else { set w 0 } lappend ww $w } fiber_eval $i "set wagi {$ww}" } } set waga(1,3) 10; # waga kraw {1,3} set waga(1,4) 11 set waga(6,4) 12 ustaw_wagi # + tworzy w kazdym fiberze zm. globalną "wagi" # jest to lista z wagami odp. połączeniom z sąsiadami # + wagi nie występujące w tabliy waga, w konsoli # mają wagę = 0 fiber_iterate {_puts "($id) $wagi"} # test
Jak dostarczyć wszystkie niedostarczone komunikaty w modelu asynchronicznym?
przydatne przy budowaniu egzekucji asynch...
# (wykonać to w konsoli po utworzeniu fiberów!) proc dostarczWszystkieKom {} { fiber_iterate { iterate __i $stopien { eval lappend kom${__i} [set kom${__i}_pisz] set kom${__i}_pisz {} } unset __i } } dostarczWszystkieKom; pokazKom # test (w symulatorze asynch!)
Jak poradzić sobie z długim czasem ładowania pakietów we wszystkich fiberach?
np. pakietu struct::set z tcllib, do operacji na zbiorach...
# (wykonać to w konsoli po utworzeniu 20 fiberów!) fiber_iterate {lappend auto_path ./tcllib}; # jeśli to potrzebne time {fiber_iterate {package re struct::set}} #% 15160901 microseconds per iteration # + strasznie długo... # tworzymy aliasy w fiberach do komendy struct::set w konsoli !! lappend auto_path ./tcllib; # jeśli to potrzebne package re struct::set #% 2.2.3 time {iterate i $liczbaWierz {fiber$i alias struct::set struct::set}} #% 639 microseconds per iteration # + znacznie szybciej... fiber_eval 0 {struct::set difference {1 2 3} {3 4 5}} #% 1 2 # + dziala... # 22.10.2017, Uwaga: wolno używać tylko met. funkcyjnych (tych BEZ arg. svar) !!!