Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
54
Task/Events/Tcl/events-1.tcl
Normal file
54
Task/Events/Tcl/events-1.tcl
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# Simple task framework built from coroutines
|
||||
proc pause ms {
|
||||
after $ms [info coroutine];yield
|
||||
}
|
||||
proc task {name script} {
|
||||
coroutine $name apply [list {} \
|
||||
"set ::tasks(\[info coro]) 1;$script;unset ::tasks(\[info coro])"]
|
||||
}
|
||||
proc waitForTasksToFinish {} {
|
||||
global tasks
|
||||
while {[array size tasks]} {
|
||||
vwait tasks
|
||||
}
|
||||
}
|
||||
|
||||
# Make an Ada-like event class
|
||||
oo::class create Event {
|
||||
variable waiting fired
|
||||
constructor {} {
|
||||
set waiting {}
|
||||
set fired 0
|
||||
}
|
||||
method wait {} {
|
||||
while {!$fired} {
|
||||
lappend waiting [info coroutine]
|
||||
yield
|
||||
}
|
||||
}
|
||||
method signal {} {
|
||||
set wake $waiting
|
||||
set waiting {}
|
||||
set fired 1
|
||||
foreach task $wake {
|
||||
$task
|
||||
}
|
||||
}
|
||||
method reset {} {
|
||||
set fired 0
|
||||
}
|
||||
}
|
||||
|
||||
# Execute the example
|
||||
Event create X
|
||||
task A {
|
||||
puts "waiting for event"
|
||||
X wait
|
||||
puts "received event"
|
||||
}
|
||||
task B {
|
||||
pause 1000
|
||||
puts "signalling X"
|
||||
X signal
|
||||
}
|
||||
waitForTasksToFinish
|
||||
4
Task/Events/Tcl/events-2.tcl
Normal file
4
Task/Events/Tcl/events-2.tcl
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
after 1000 set X signalled
|
||||
puts "waiting for event"
|
||||
vwait X
|
||||
puts "received event"
|
||||
Loading…
Add table
Add a link
Reference in a new issue