私は相対性理論で C++ を初めて使用し、TCL を初めて使用します。tValue という名前の変数を共有する 1 組のアプリケーション (C++ で 1 つ、TCL で 1 つ) を作成しようとしています。
目標は、C++ プログラムがユーザー入力を要求し、その入力を tValue に割り当てることです。次に、TCL プログラムの tValue を更新する必要があります。
私は検索して検索してきましたが、他に試してみることができません。
編集: もともと、tcl スクリプトは「メイン」C++ スレッドで実行されていましたが、C++ スレッドは tcl スクリプトが終了するのを待ちました。tcl スクリプトを呼び出す C++ コードを独自のスレッドにシフトすると、2 つのスレッドの同時実行が可能になりました (これがこれを実現する唯一の方法ですか?) が、tValue はまだ更新されていませんでした。
これらは、2 つのプログラムのソース コードです。
test.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"
どんな助けでも大歓迎です、私はそれを機能させようとしてキーボードを叩いています...そして失敗しています...