2017-07-08 11 views
0

同期モードでスレッドにメッセージを送信し、トレース変数metohdを使用して結果を取得します。問題は、スレッドからの応答が得られないということです。通常のモード(thread :: send thread_id {command} var)でメッセージを送信すると、結果はvarに保存されます。誰かが間違っている箇所を指摘できますか?以下は私のコードを渡します:tcl thread :: send -async not works

trace add variable res write {apply {{v1 v2 op} { 
    upvar 1 $v1 v 
    puts "updated variable to $v"}}} 

set th [thread::create { 

    puts "new thread id : [thread::id]" 
    proc fun {n} { 
    return [expr {$n*2}] 
    } 
    thread::wait 
}] 
# thread::send $th [list fun $t] res 
thread::send -async $th [list fun 43] res 
+0

[スレッドマニュアルページ](http://www.tcl.tk/man/tcl/ThreadCmd/thread.htm)には、次のように記載されています。 "-asyncフラグが指定されている場合、コマンドは結果を待たずにそれは空の文字列を返します。あなたは何を期待していたのですか?変数はスレッド間で共有されず、スレッド間でトレースすることはできません。 –

+0

答えをありがとう。私はしばらくしてからres値が変更され、このイベントを非同期で登録できると思っていました。 vwaitを使わずにメインスレッドにthスレッドの終わりを登録する他の方法はありますか? – MacC

答えて

0

ソース/メインスレッドのイベントを待っていますか?そうでない場合は、res変数を設定する非同期応答メッセージを処理することはありません。