Это почти нормально, но переменные, поступающие через последовательный порт
обновляется каждую секунду
Если это требование, то:
(1) Получить значение, возвращаемое из канала, в процедуре обратного вызова: receiver
(2) Ввести цикл обработки событий только один раз, без привязки к глобальной переменной List
и т. П.
proc receiver {chan} {
set data [gets $chan]
puts [split $data ","]; # (1) print the return value
}
set chan [open com5 r]
fconfigure $chan -mode "9600,n,8,1" -blocking 1 -buffering none -translation binary
fileevent $chan readable [list receiver $chan]
vwait forever
puts "Quitted from event loop ..."
Это войдет в цикл обработки событий, связанный с неопределенной переменной forever
, не установленной в вашем скрипте. Таким образом, он не выйдет, если вы не остановите исполняемый файл (например, tclsh
) или если вы не предоставите явное условие завершения, например ::
proc receiver {chan} {
global counter
set data [gets $chan]
puts [split $data ","]; # (1) print the return value
if {[incr counter] == 5} {
global forever
set forever 1; # (2) Exit the event loop, after receiver having been called 5 times
}
}