2010-07-09 91 views
2

我正在使用Snack音频处理套件以及TCL。 我想切割一部分声音,并将此部分分配给另一个线程使用。通过引用传递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 
    } 
} 

回答

4

这不起作用。 Tcl线程被设计成彼此强烈隔离,因为它大量减少了正常处理所需的锁定量。这种情况的另一面是,在线程之间传递事物并非微不足道(除了包含命令的短消息,哪些音频数据不是!)但是有前进的方向...

如果您可以发送数据作为一大块字节(在脚本级别),那么我建议使用tsv package在线程之间转移它,这个线程包已经包装好了,所以你已经拥有它了。这将使您可以相对简单地在线程之间传输数据。请注意,快餐包在其脚本级接口中不具有线程感知能力,因此数据传输仍将涉及复制,而Tk(如许多GUI工具包,FWIW)不支持多线程使用(良好,而不是另一次没有技术),所以如果你正在做波形可视化,你还有一些工作要做。 (OTOH,现代CPU也有时间备用。)