저는 Tcl 및 C++을 사용하여 작성된 ns-2라는 개별 이벤트 시뮬레이터를 사용하고 있습니다. 나는 TCL의 코드를 작성하려고했다 :변수 값을 변경할 수 없습니다
set ns [new Simulator]
set state 0
$ns at 0.0 "puts \"At 0.0 value of state is: $state\""
$ns at 1.0 "changeVal"
$ns at 2.0 "puts \"At 2.0 values of state is: $state\""
proc changeVal {} {
global state
global ns
$ns at-now "set state [expr $state+1]"
puts "Changed value of state to $state"
}
$ns run
다음은 출력입니다 :
At 0.0 value of state is: 0
Changed value of state to 0
At 2.0 values of state is: 0
상태의 값은 변경하지 않는 것. 내가 TCL을 사용할 때 잘못된 것을하고 있는지 확신 할 수 없다. 누구나 여기에 잘못 될 수있는 것에 대한 아이디어가 있습니까?
편집 : 도움을 주셔서 감사합니다. 사실, ns-2는 (시뮬레이터 자체를 다시 컴파일하지 않는 한) 많은 제어가없는 어떤 것입니다. 나는 제안을 시도하고 여기에 출력의 : 코드에 대한
:
set ns [new Simulator]
set state 0
$ns at 0.0 "puts \"At 0.0 value of state is: $state\""
$ns at 1.0 "changeVal"
$ns at 9.0 "puts \"At 2.0 values of state is: $state\""
proc changeVal {} {
global ns
set ::state [expr {$::state+1}]
$ns at-now "puts \"At [$ns now] changed value of state to $::state\""
}
$ns run
출력은 다음과 같습니다
set ns [new Simulator]
set state 0
$ns at 0.0 "puts \"At 0.0 value of state is: $state\""
$ns at 1.0 "changeVal"
$ns at 9.0 "puts \"At 2.0 values of state is: $state\""
proc changeVal {} {
global ns
set ::state [expr {$::state+1}]
$ns at 1.0 {puts "At 1.0 values of state is: $::state"}
}
$ns run
출력 :
At 0.0 value of state is: 0
At 1 changed value of state to 1
At 2.0 values of state is: 0
그리고 코드 is :
,210는 확실하지 ... 작동하지 않는 것의 경우 NS2 또는 내 코드에 문제가 ...
'set state [expr {$ state + 1}] 대신'incr state'를 사용하셨습니까? –
예. 그냥 시도했는데 ... 작동하지 않는 것 같습니다. – Legend
글로벌 레퍼런스와 함께해야합니다 –