2013-09-25 28 views
0

我編寫了一些代碼,允許用戶在文本框中輸入代碼,並在單獨的進程中運行該代碼並收集代碼的輸出,並將servlet的響應返回給瀏覽器。無限地寫入瀏覽器的流?

問題是

如果什麼用戶所做的無限循環的程序....所以進程將繼續運行,並寫入到瀏覽器流發生一次,我怎麼能寫信給瀏覽器的數據流中的情況下,一個無限循環。

回答

0

你已經偶然發現了halting problem。沒有辦法確定一段代碼是否處於無限循環中。你可以做的最好的做法是強加一個時間限制,並在此之後停止代碼。

在Java中,您可以通過在自己的線程中執行代碼,然後在給定的時間後終止線程來完成此操作。你可以在這個SO帖子中看到一個例子:Killing thread after some specified time limit in Java

+0

所以,你的意思是說,無論我在哪裏收集mybprocess的輸出,我應該把它放在一個執行器線程內,並在指定的時間後殺死它? – cafebabe1991

+0

如果你正在執行任意代碼,你不能控制:是的。不可能正確地檢測給定的一組指令是否會完成運行。在一個非常簡單的範圍內,你可以嘗試它,但是你的努力將是徒勞無益的,因爲複雜的輸入最終會阻礙你的嘗試。 –