2014-09-23 70 views
2

我遇到了一個TCL腳本中的問題。我需要在終止條件的無限循環中運行它,並且在每個循環中我需要編寫一些輸出。這是即時通訊使用的基本代碼:定期運行TCL腳本並獲得連續結果

proc wr {i} { 
    puts -nonewline "$i" 
} 

proc do {roof} { 
    set end 0 
    while {$end < $roof} { 
     after 1000 
     wr $end 
     incr end 
    } 
} 

do 10 

預期的行爲是每一秒鐘都會有一個新的輸出,直到$結束== $屋頂。但是,在運行此腳本後,控制檯窗口忙於10秒鐘,此後,整個輸出立即打印出來。

謝謝您的建議:)

回答

3

的問題是,你不衝stdout

如果修改腳本,以便它刷新stdout

proc wr {i} { 
    puts -nonewline "$i" 
    flush stdout 
} 

proc do {roof} { 
    set end 0 
    while {$end < $roof} { 
     after 1000 
     wr $end 
     incr end 
    } 
} 

do 10 

它將工作。您還可以更改stdout渠道無法比擬的緩衝,默認爲line

fconfigure stdout -buffering none 

如果你寫了多條線路,默認的緩存將刷新標準輸出,當它遇到一個換行符,但你永遠不寫新隊。

+0

它在TCL腳本中效果很好,謝謝!但是,當我在TK中嘗試相同的方式 - 間隔更改標籤文本時 - 清除標準輸出不會顯而易見,但必須有不同的解決方法,您能幫助解決這個問題嗎? :) – 2014-09-23 11:05:23

+0

@Tomáš'GunsBlazing'Frček嗯,我不確定這是否會解決您的問題,但我使用遞歸而不是循環來動畫'gif'圖片。我有我的過程來更改圖像標籤,並且在'proc'的末尾使用'$ ms procname'後面的'。 – Jerry 2014-09-23 11:57:00

+0

使用'update'或者安排下一次執行''1000之後'[list wr $ end]' – 2014-09-23 11:57:40