You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
69 lines
1.8 KiB
set arg1 [lindex $::argv 0] |
|
|
|
interp create code1 |
|
interp create code2 |
|
|
|
|
|
puts stderr "loading Thread package in all 3 interps" |
|
package require Thread |
|
code1 eval {package require Thread} |
|
code2 eval {package require Thread} |
|
|
|
puts stderr "establishing ::testfunc proc in all 3 interps" |
|
code1 eval {proc ::testfunc {args} {puts stderr "evaluated in code1 interp: $args"}} |
|
code2 eval {proc ::testfunc {args} {puts stderr "evaluated in code2 interp: $args"}} |
|
proc ::testfunc {args} {puts stderr "evaluated in parent interp: $args"} |
|
|
|
|
|
puts stderr "Calling a thread function in nominated interp '$arg1' first" |
|
#1st use of thread function makes that interp the one to receive all subsequent messages |
|
switch -- $arg1 { |
|
parent { |
|
thread::id |
|
} |
|
code1 { |
|
code1 eval {thread::id} |
|
} |
|
code2 { |
|
code2 eval {thread::id} |
|
} |
|
default { |
|
puts stderr "Usage thread_interp.tcl parent|code1|code2" |
|
exit 1 |
|
} |
|
} |
|
|
|
|
|
puts stderr "sending scripts" |
|
thread::send -async [thread::id] { |
|
::testfunc script sent from parent interp |
|
} |
|
code1 eval { |
|
thread::send -async [thread::id] { |
|
::testfunc script sent from code1 interp |
|
} |
|
} |
|
code2 eval { |
|
thread::send -async [thread::id] { |
|
::testfunc script sent from code2 interp |
|
} |
|
} |
|
#test |
|
after 0 {::testfunc after script in parent interp} |
|
code1 eval {after 0 {::testfunc after script in code1 interp}} |
|
code2 eval {after 0 {::testfunc after script in code2 interp}} |
|
|
|
|
|
code1 eval { |
|
set workertid [thread::create] |
|
thread::send $workertid {package require Thread} |
|
thread::send $workertid [list thread::send -async [thread::id] { |
|
::testfunc script sent from code1 interp via worker |
|
}] |
|
} |
|
|
|
after idle {set ::done 1} |
|
vwait ::done |
|
|
|
|
|
|
|
|