1.一種動態(tài)編譯運行外部代碼的系統(tǒng),包括:
主應(yīng)用,并設(shè)定主應(yīng)用為調(diào)用者,其中,主應(yīng)用指接收用戶輸入的代碼及輸入信息的應(yīng)用,調(diào)用代碼運行引擎并返回輸出信息給用戶;
運行主線程:負責(zé)獨立編譯運行一段代碼,由于每段代碼都在一個運行主線程里面運行,多用戶可以互不影響;
超時控制線程:負責(zé)監(jiān)控某段代碼的運行是否超時,如果超時則停止運行并調(diào)用超時事件。
2.根據(jù)權(quán)利要求1所述的動態(tài)編譯運行外部代碼的系統(tǒng),其特征在于:所述運行主線程包括:由Runtime發(fā)起的運行進程、輸入接口、輸出接口三部分組成,其中:Runtime的exec方法調(diào)用命令行編譯和運行指令,自動生成一個運行進程,執(zhí)行代碼的編譯運行;輸入接口負責(zé)接收主應(yīng)用上用戶的輸入信息,發(fā)送給運行進程的輸入流,由運行進程接收處理;輸出接口負責(zé)監(jiān)聽運行進程的輸出流,當(dāng)由輸出信息產(chǎn)生時,讀取信息,發(fā)送給主應(yīng)用進行顯示。
3.根據(jù)權(quán)利要求2所述的動態(tài)編譯運行外部代碼的系統(tǒng),其特征在于:所述:由Runtime發(fā)起的運行進程、輸入接口、輸出接口三部分都以獨立線程的方式存在,互不干擾。
4.一種動態(tài)編譯運行外部代碼的方法,包括如下步驟:
S1:設(shè)定某一主應(yīng)用為調(diào)用者,其中,主應(yīng)用指接收用戶輸入的代碼及輸入信息的應(yīng)用,調(diào)用代碼運行引擎并返回輸出信息給用戶;
S2:運行主應(yīng)用 ,啟動運行主線程,其中,運行主線程為負責(zé)獨立編譯運行一段代碼;
S3:啟動超時控制線程,超時控制線程在啟動運行主線程開始后的設(shè)定時間內(nèi)對運行主線程進行檢查,判斷運行主線程是否存活:
如果還存活則認定為超時,結(jié)束運行主線程并觸發(fā)超時處理事件;
如果運行的代碼在三分鐘內(nèi)正常運行結(jié)束,則運行主線程乃至其中的運行進程+輸入接口+輸出接口都會被結(jié)束并自動銷毀,之后超時線程會認定運行主線程已正常結(jié)束;
如果運行的代碼存在死循環(huán),則超時控制線程會認定運行主線程為超時;
如果運行的代碼有輸入,此時運行進程會被阻塞等待用戶輸入,之后如果用戶一直沒有輸入,則超時控制程序也會認定運行主線程為超時;
如果阻塞等待輸入后,用戶有輸入,此時運行進程會繼續(xù)往下執(zhí)行直至結(jié)束,之后超時控制線程會認定為正常結(jié)束。
5.根據(jù)權(quán)利要求4所述的動態(tài)編譯運行外部代碼的方法,其特征在于:所述運行主線程包括:由Runtime發(fā)起的運行進程、輸入接口、輸出接口三部分組成,其中:Runtime的exec方法調(diào)用命令行編譯和運行指令,自動生成一個運行進程,執(zhí)行代碼的編譯運行;輸入接口負責(zé)接收主應(yīng)用上用戶的輸入信息,發(fā)送給運行進程的輸入流,由運行進程接收處理;輸出接口負責(zé)監(jiān)聽運行進程的輸出流,當(dāng)由輸出信息產(chǎn)生時,讀取信息,發(fā)送給主應(yīng)用進行顯示。
6.根據(jù)權(quán)利要求5所述的動態(tài)編譯運行外部代碼的方法,其特征在于:所述:由Runtime發(fā)起的運行進程、輸入接口、輸出接口三部分都以獨立線程的方式存在,互不干擾。