Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在多线程模式下调用Tcl proc_C++_Multithreading_Tcl - Fatal编程技术网

C++ 在多线程模式下调用Tcl proc

C++ 在多线程模式下调用Tcl proc,c++,multithreading,tcl,C++,Multithreading,Tcl,多个线程正在调用我的函数func()。(每个线程只调用此函数一次。) 在func()内部,我希望每个线程调用一个名为Tcl\u proc\u name(不带参数)的Tcl进程 为了这个,我喜欢这个 Tcl_Eval(Tcl_CreateInterp(),“Tcl_proc_name”) 但不知何故,这段代码无法调用Tcl进程 我遗漏了什么吗?每个Tcl解释器(即Tcl\u Interp的每个实例)都与创建它的线程紧密相连;该实现在内部广泛地使用特定于线程的数据,从而实际上完全避免了对主要锁的需要

多个线程正在调用我的函数
func()
。(每个线程只调用此函数一次。)

func()
内部,我希望每个线程调用一个名为
Tcl\u proc\u name
(不带参数)的Tcl进程

为了这个,我喜欢这个

Tcl_Eval(Tcl_CreateInterp(),“Tcl_proc_name”)

但不知何故,这段代码无法调用Tcl进程

我遗漏了什么吗?

每个Tcl解释器(即
Tcl\u Interp
的每个实例)都与创建它的线程紧密相连;该实现在内部广泛地使用特定于线程的数据,从而实际上完全避免了对主要锁的需要(例如影响多线程Python代码性能的全局解释器锁)。Tcl命令完全绑定到包含它们的解释器。你必须:

  • 将消息发送到单个线程以执行操作。(请参阅
    Tcl\u QueueEvent()
    函数,或从Tcl级别使用线程包的
    Thread::send
    命令。)
  • 在多个解释器中复制命令,每个线程一个。在您的应用程序中,这可能是简单的,也可能是复杂的

  • 为避免所有疑问:您不能从多个线程安全地使用Tcl解释器。这是行不通的;放心。这将导致崩溃。

    嵌入和初始化Tcl环境的方式不完整。你有没有搜索过相关的答案?参见,例如,或。另外,检查一下在你的C或C++应用程序中嵌入TCL的秘诀。我发现我的主解释器知道一些与那个解释器注册的命令。但是当我创建特定于线程的解释器时,它不知道这些COMAMND中的任何一个。。是否有方法将主解释器的所有命令继承到线程特定解释器Deepika Bansal 21分钟前,我发现我的主解释器知道一些在该解释器中注册的命令。但是当我创建特定于线程的解释器时,它不知道这些COMAMND中的任何一个。。是否有方法将主解释器的所有命令继承到线程特定解释器Deepika Bansal 21分钟前删除