通过引用传递TCL - 线程?

时间:2010-07-09 13:43:17

标签: multithreading tcl

我正在使用Snack音频处理套件和TCL。 我想要删除部分声音并将此部分提供给另一个可以使用的线程。

我的问题是如何通过引用在TCL中的线程之间传递内容。

proc a {} {  
    snack::sound snd  
    thread::send -async $Thread [list B snd]
}

set Thread [thead::create { 
    proc B{snd} { 
    ... do something with snd
    }
}

1 个答案:

答案 0 :(得分:4)

那不行。 Tcl螺纹被设计成彼此强烈隔离,因为它大大减少了正常处理所需的锁定量。这样做的缺点是在线程之间传递东西是非常重要的(除了包含命令的短消息,音频数据不是!)但是还有一种方法......

如果您可以将数据作为一个字节块(在脚本级别)发送,那么我建议使用tsv package在线程之间传输数据,该{{3}}与线程包一起分配,因此您已经拥有它。这将让您相对简单地在线程之间传输数据。请注意,零食包在其脚本级界面中不是线程感知的,因此数据传输仍将涉及复制,而Tk(如许多GUI工具包,FWIW)不支持多线程使用(以及,并非没有其他时间的技术)所以,如果你正在进行波形可视化,你就会有一些工作要做。 (OTOH,现代CPU也有很多时间可用。)