From: Zoran V. <zo...@ar...> - 2003-07-17 06:45:43
|
On Wednesday 16 July 2003 20:55, you wrote: > Example: > > class Auto { > variable _color "" > > public method setColor {color} {set _color $color} > public method getColor {} {return $_color} > > public proc new {} {return [Auto ::#auto]} > } > > set audi [Auto::new] > $audi setColor red > > Can i share audi variable (object)? > Now, we're gettting closer.... And the answer is: no. Rationale.... Tcl uses the compartment threading model where all resources created by Tcl in an Tcl interpreter are always bound to that interpreter. Examples are: channles, commands, namespaces, etc. Now, since Tcl interps are bound to a thread that created them, you can not share mentioned Tcl resources. The only way one could achieve this would be to write the object serializer which synthetizes a Tcl script representing the object and then pass this script to the remote thread to re-create the object. That is, some kind of object marshalling would be needed. I know you wont't be very happy with the answer. I'm not either. But out of my experience (I use XOTcl instead of incrTcl) I'm able to work-arround this limitation quite successfully and have written quite a complicated MT-application using OO constructs and threads. Zoran |