The thread extension brings native thread capabilities to Tcl
A distinct meaning of "thread" occurs in discussions of bytecode, especially when Forth is nearby.
and not the current 2.6.
dgp in the Tcl chatroom, 2013-04-04:
10:41 <@ijchain> <dgp> tpool::get has ability to capture the error state of a worker thread in the pool. 10:43 <@ijchain> <dgp> it does look like [tpool::wait] is the only way to wait for worker thread completion. That's unfortunate. 10:45 <@ijchain> <dgp> I imagine you can work around the design defect. 10:45 <@ijchain> <dgp> But now I've got reasons not to use tpool. Thanks for that.
package require Thread
The 2.6 release adds a sub-package called Ttrace. This allows for easy propagation of interpreter related resources (procedures, namespaces, objects (for XOTcl)). Usage is trivial: yust wrap the code you want to replicate within ttrace::eval like this:
package req Thread package req Ttrace for {set i 0} {$i < 4} {incr i} { set tid($i) [thread::create -preserved] } ttrace::eval { proc foo {args} { puts foo } proc bar {args} { puts bar } }
and execute this from any thread created by the thread extension. This will replicate the definitions of 'foo' and 'bar' to all existing threads. In the above example, all 4 threads will be seeded. One very important design feature of Ttrace is that resources are propagated in a lazy fashion. That is, nothing is actually done in other threads until the resource gets referenced for the first time. This is accomplished by overloading the Tcl unknown command. So, when the unknown triggers, it tries to locate the resource definition by doing a lookup in the Ttrace private (in-memory) database first. On hit, the definition is loaded on-the-fly in the current interpreter. On miss, the unknown processing is delegated down-the-road. This way, thread startup and memory consumption are minimized. Thanks to Vince Darley for his great command trace framework, which is used as the base for the Trace package. For more information see 'man ttrace'.
Silas 2006-12-17: By default threads that are not the main thread don't have an event loop (Am I wrong?). Do add it, insert a [vwait forever] or [vwait your_variable] inside your thread::create block.
AKM 2006-10-26 I thought the advice was to use thread::wait so that the thread can be terminated with thread::release?
http://rkeene.org/projects/info/wiki/Tclkits isn't threaded.
AK 2011-09-16 11:54:21: ActiveState's basekits are threaded for OS X, Windows in all versions, and threaded for all platforms for 8.5+.