我正在使用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
}
}
答案 0 :(得分:4)
那不行。 Tcl螺纹被设计成彼此强烈隔离,因为它大大减少了正常处理所需的锁定量。这样做的缺点是在线程之间传递东西是非常重要的(除了包含命令的短消息,音频数据不是!)但是还有一种方法......
如果您可以将数据作为一个字节块(在脚本级别)发送,那么我建议使用tsv
package在线程之间传输数据,该{{3}}与线程包一起分配,因此您已经拥有它。这将让您相对简单地在线程之间传输数据。请注意,零食包在其脚本级界面中不是线程感知的,因此数据传输仍将涉及复制,而Tk(如许多GUI工具包,FWIW)不支持多线程使用(以及,并非没有其他时间的技术)所以,如果你正在进行波形可视化,你就会有一些工作要做。 (OTOH,现代CPU也有很多时间可用。)