Class ::nsshell::THREAD (public)
::nx::Class ::nsshell::THREAD
Defined in /usr/local/ns/tcl/nsshell/shell.tcl
- Testcases:
- No testcase defined.
Source code: :property cmd:required :property recreate:boolean :property tid :method init {} { if {![ns_ictl epoch]} { # We are during initialization. set :initCmd { package req nx } } append :initCmd { ns_thread name SELF ::nsf::exithandler set { ns_log notice "[self] exits" } } regsub -all SELF ${:initCmd} [self] :initCmd append :initCmd \n [list set ::currentThread [self]] \n ${:cmd} set :mutex [thread::mutex create] ns_log notice "mutex ${:mutex} created" next } # # :public method getInitcmd {} { # return ${:initCmd} # } # :object method recreate {obj args} { # # # # this method catches recreation of THREADs in worker threads # # it reinitializes the thread according to the new definition. # # # ns_log notice "recreating [self] $obj, tid [$obj exists tid]" # if {![string match "::*" $obj]} { set obj ::$obj } # $obj configure -recreate true # next # $obj configure -cmd [lindex $args 0] # if {[nsv_exists [self] $obj]} { # set tid [nsv_get [self] $obj] # ::thread::send $tid [$obj getInitcmd] # $obj configure -tid $tid # my log "+++ content of thread $obj ($tid) redefined" # } # } :public method do {cmd} { # # Execute the provided cmd in the slave thread. If the # thread does not exist, create it. # #ns_log notice "THREAD [self] received <$cmd>" if {![nsv_exists [current class] [self]]} { # # lazy creation of a new slave thread # thread::mutex lock ${:mutex} if {![nsv_exists [current class] [self]]} { set :tid [::thread::create] } nsv_set [current class] [self] ${:tid} set initcmd ${:initCmd} ::thread::send ${:tid} $initcmd set :tid [nsv_get [current class] [self]] thread::mutex unlock ${:mutex} } else { # # slave thread is already up and running # set :tid [nsv_get [current class] [self]] } ns_log notice "calling [current class] (${:tid}, [pid]) $cmd" thread::send ${:tid} $cmd }XQL Not present: Generic, PostgreSQL, Oracle