我正在尝试将 Tcl 变量链接到 C 变量,以便在 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
那样,但它存储了错误的变量,应该是 1 而不是 35。是(char *) &linkedVar
错误的转换吗?