Posted to tcl by Whiskey at Thu Mar 21 13:53:14 GMT 2013view raw
- # Set packages
- package require Thread
-
- # Create ThreadStarter
- proc Start {one two three} {
-
- # Set MasterID
- set mid [thread::id]
-
- # Set shared variables
- tsv::set thread mid $mid
-
- # Create thread
- set tid [thread::create {
-
- # Set packages
- package require struct::queue
-
- # Create thread proc
- proc Start-Thread {one two three} {
-
- # Set variables
- set mid "[tsv::set thread mid]"
- set tid "[thread::id]"
-
- # Send massage
- thread::send $mid [list puts "I was here: $tid"]
- }
-
- # Create queue proc
- proc isQueue {one two three} {
-
- # Create queue
- set queue [struct::queue]
-
- # Put jobs in queue
- $queue put [list Start-Thread "$one" "$two" "$three"]
-
- # Check for jobs in queue
- while {[$queue size]} {
- eval [$queue get]
- }
-
- # Remove queue
- $queue destroy
- }
- thread::wait
- }]
- # Start thread
- thread::send -async $tid [list isQueue "$one" "$two" "$three"]
- }
-
- # Test result in loop
- proc loop {n} {
- for {set i 0} {$i < $n} {incr i} {
- Start "1" "2" "3"
- }
- }
-
- loop 20
-
- after 3000
-
- update