C スレッドの作成中にポインターを最新のものに渡し、TCL-C スレッド共有変数を持たせるために、Tcl 変数を C 変数にリンクしようとしています (ネイティブの TCL スレッド共有変数関数を使用できるとは思いません)。 . 両方の変数をリンクするのにいくつかの困難があります。これが私のやり方です:
#Tcl code, calling the C function:
set linkedVar 98
puts "linkedVar: $linkedVar"
load [file join [pwd] libCextension[info sharedlibextension]]
set threadId [createThreadC]
puts "Created thread n° $threadId"
puts "linkedVar: $linkedVar"
このcreateThreadC
関数は C スレッドを作成し、その ID を返し、 とのリンクを作成しようとしますlinkedVar
。
// C function called by Tcl
static int
createThreadC_Cmd(
ClientData cdata,
Tcl_Interp *interp,
int objc,
Tcl_Obj *const objv[])
{
int linkedVar=2;
Tcl_LinkVar(interp, "linkedVar", (char *) &linkedVar, TCL_LINK_INT);
linkedVar=1;
...
# Thread creation, return Tcl object with thread ID
...
return TCL_OK;
}
出力は次のとおりです。
linkedVar: 98
Created thread n° -1227199680
linkedVar: 35
CプログラムがしなければならなかったlinkedVar
ように値が変更されましたが、間違った変数が格納されています.35ではなく1である必要があります(char *) &linkedVar
.間違っているのはキャストですか?