2010-07-09 92 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也有時間備用。)