# paste it in a fixed width character terminal for better reading
# do '$ touch test.txt' before you run it with '$ tclsh scriptname.tcl'
set f [open test.txt]
puts "f = $f"
set k 0
after 0 {puts "before: k = $k"}
# k is in the global space, the script is run in the global space
fileevent $f readable {incr k; puts "k = $k"}
after 500
# events are processed in the order in which they have been created
# 'vwait k' stops processing events when it finds the first k modification event
# one new fileevent event is created when fileevent is first called
# and it is PERMANENTLY placed FIRST IN LINE in the event queue
# this event probably creates a hook for vwait and update such that
# two more fileevent events are created next time when
# either the event loop is entered and there is no such a fileevent event first in the queue
# or the queue is empty when the event loop is exited
# these two fileevent events are placed normally last in line in the event queue
# such a scenario is also suggested by
# "To generate events in case of an empty queue
# Tcl_DoOneEvent will first ask all registered event sources to setup themselves"
# at https://tcl.sourceforge.net/c-api/notifier.html
# error bug this is crazy and that's why it's not mentioned in man fileevent
for {set j 1} {$j<=6} {incr j} {
puts {new for cycle}
after 500
after 0 {puts "before: k = $k"}
after 500
# update
vwait k
}
# update
close $f
puts "f = $f"
No comments:
Post a Comment