我是 C++ 的相对论新手,对 TCL 非常陌生。我正在尝试编写一对共享一个名为 tValue 的变量的应用程序(一个在 C++ 中,一个在 TCL 中)。
目标是 C++ 程序要求用户输入并将该输入分配给 tValue。然后 TCL 程序应该更新它的 tValue。
我一直在寻找和寻找,但找不到其他可以尝试的东西。
编辑:最初 tcl 脚本是在“主”C++ 线程中执行的,但 C++ 线程等待 tcl 脚本完成。将调用 tcl 脚本的 c++ 代码转移到它自己的线程中确实允许两个线程同时执行(这是实现这一点的唯一方法吗?),但 tValue 仍然没有更新
这些是这两个程序的源代码:
测试.cpp
#include <tcl.h>
#include <iostream>
using namespace std;
Tcl_Interp * interp = Tcl_CreateInterp();
char * tValue = Tcl_Alloc(20);
void *thread_proc(void* x);
int main() {
cout << "C++: INIT: " << Tcl_Init(interp) << "\n";
cout << "C++: I'm alive, I'm alive, I'M ALIVE!!!\n";
pthread_t t1;
int res = pthread_create(&t1,NULL,thread_proc,NULL);
int errLink = Tcl_LinkVar (interp, tValue, (char *) &tValue, TCL_LINK_STRING);
cout << "C++: INTERP " << errLink << "\n";
usleep(5000);
cout << "C++: Well...\nC++: Has anything happened?\n";
while (true) {
cout << "C++: Enter a string\n";
cin >> tValue;
cout << "C++: You have entered " << tValue << "\n";
Tcl_UpdateLinkedVar(interp, tValue);
}
return 1;
}
void *thread_proc(void* x) {
cout << "C++ TP: Thread Launched: " << "\n";
int errEval = Tcl_EvalFile(interp,"./test.tcl");
cout << "C++ TP: EVAL: " << errEval << "\n";
pthread_exit(NULL);
}
和 test.tcl
#!/home/gc/tcl/bin/tclsh8.6
set tValue ""
puts "I'm also alive"
after 10000
puts "about to puts"
after 1000
puts $tValue
after 10000
puts "about to end"
after 1000
puts "Ended"
任何帮助将不胜感激,我只是在敲击键盘试图使其工作......失败......