2013-10-28 13 views
0

我正在創建一個線程化程序,其中不是所有線程都在開始時產生。有些人必須先等待一個或多個線程完成。這不會是一個問題,除非我想保留xterm以便讀取輸出。在某些情況下,管道到文件不起作用,因爲終端輸出中有一些花哨的東西會覆蓋自身。在新的xterm中帶有每個線程的Threaded Perl

我一直在使用 my $xt_hold = "xterm -sl 5000 -geometry 350x50+0+100 -iconic -hold -e $cmd"; system($xt_hold);來創建xterm,但是這不允許我在完成時加入線程。有沒有另一種方法可以讓xterm保持打開狀態,並在完成時知道何時/加入線程?

如果使用GNU screen有更好的解決方案,那麼我可能會對此感興趣,但我的主要選擇是xterm,因爲我更熟悉它。

+0

對不起,可能會誤解。當你說'my $ xt_hold =「xterm -sl 5000 ... -e $ cmd」'你的意思是'我的$ xt_hold = \'xterm -sl 5000 ... \''?你使用反引號來產生一個xterm shell,或者你只是把一個字符串放在'$ xt_hold'中? – mikew

+0

用'system'調用它,所以'xt_hold'只是一個字符串。與實際代碼相比,這個問題被簡化了。用您的評論更新了問題。 – Stuart

回答

0

在試圖回答這個問題時,我意識到了一些問題。在文本文件中顯示的字符是用於顏色的控制字符,我猜也有刪除/退格字符。這些只能由終端解釋,所以我可以用less -r查看原始終端中的日誌文件。

0

我建議你使用另一種方法:隊列

使用Thread::Queue可以告訴每個工作線程將結果放入隊列中。另一個線程(爲輸出創建)將從隊列中讀取並輸出到終端(或文件或DB等)。