一种动态编译运行外部代码的系统及其方法技术方案

技术编号:14774699 阅读:117 留言:0更新日期:2017-03-09 12:11
本发明专利技术涉及一种动态编译运行外部代码的系统,包括:主应用,并设定主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;运行主线程:负责独立编译运行一段代码,由于每段代码都在一个运行主线程里面运行,多用户可以互不影响;超时控制线程:负责监控某段代码的运行是否超时,如果超时则停止运行并调用超时事件。同时,本发明专利技术还公开了一种动态编译运行外部代码的方法。本发明专利技术支持所有的编程语言,支持对外部代码的各种管理流程,为外部代码里面的演示输出、输入输出、多线程、死循环等内容运行上的技术难点提供了解决方案。

【技术实现步骤摘要】

本专利技术涉及一种代码运行系统及其方法,尤其涉及一种动态编译运行外部代码的系统及其方法
技术介绍
在一个应用里面,接收外部代码片段,进行动态编译和运行,返回运行结果。此技术主要用于编程技术的在线教学、作业、测评、考试、模拟回放等
一般而言,所有在线编程的产品都需要一个运行引擎的支持,同类产品的特点是能编译运行外部代码,一次性返回所有结果。但是,同类产品无法解决以下问题:1)外部代码存在时间延迟,需要多次返回;2)外部代码存在输入输出,如先提示,等待用户输入,再输出;3)外部代码里有多线程,持续不断的输出;4)外部代码有死循环,在死循环里不断输出,需要能持续输出,超时自动停止。以上这些问题,在编程语言的学习中都是很重要的内容,如果解决不了,则教学就不能达到很好的效果。
技术实现思路
本专利技术为了克服现有技术的不足,提供一种动态编译运行外部代码的系统及其方法,支持所有的编程语言,支持对外部代码的各种管理流程,为外部代码里面的演示输出、输入输出、多线程、死循环等内容运行上的技术难点提供解决方案。为此,本专利技术采用如下技术方案:一种动态编译运行外部代码的系统,包括:主应用,并设定主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;运行主线程:负责独立编译运行一段代码,由于每段代码都在一个运行主线程里面运行,多用户可以互不影响;超时控制线程:负责监控某段代码的运行是否超时,如果超时则停止运行并调用超时事件。进一步地,所述运行主线程包括:由Runtime发起的运行进程、输入接口、输出接口三部分组成,其中:Runtime的exec方法调用命令行编译和运行指令,自动生成一个运行进程,执行代码的编译运行;输入接口负责接收主应用上用户的输入信息,发送给运行进程的输入流,由运行进程接收处理;输出接口负责监听运行进程的输出流,当由输出信息产生时,读取信息,发送给主应用进行显示。进一步地,所述:由Runtime发起的运行进程、输入接口、输出接口三部分都以独立线程的方式存在,互不干扰。本专利技术的另一方面,提供一种动态编译运行外部代码的方法,包括如下步骤:S1:设定某一主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;S2:运行主应用,启动运行主线程,其中,运行主线程为负责独立编译运行一段代码;S3:启动超时控制线程,超时控制线程在启动运行主线程开始后的设定时间内对运行主线程进行检查,判断运行主线程是否存活:如果还存活则认定为超时,结束运行主线程并触发超时处理事件;如果运行的代码在三分钟内正常运行结束,则运行主线程乃至其中的运行进程+输入接口+输出接口都会被结束并自动销毁,之后超时线程会认定运行主线程已正常结束;如果运行的代码存在死循环,则超时控制线程会认定运行主线程为超时;如果运行的代码有输入,此时运行进程会被阻塞等待用户输入,之后如果用户一直没有输入,则超时控制程序也会认定运行主线程为超时;如果阻塞等待输入后,用户有输入,此时运行进程会继续往下执行直至结束,之后超时控制线程会认定为正常结束。进一步地,所述运行主线程包括:由Runtime发起的运行进程、输入接口、输出接口三部分组成,其中:Runtime的exec方法调用命令行编译和运行指令,自动生成一个运行进程,执行代码的编译运行;输入接口负责接收主应用上用户的输入信息,发送给运行进程的输入流,由运行进程接收处理;输出接口负责监听运行进程的输出流,当由输出信息产生时,读取信息,发送给主应用进行显示。进一步地,所述:由Runtime发起的运行进程、输入接口、输出接口三部分都以独立线程的方式存在,互不干扰。本专利技术具有如下有益效果:1.本动态编译运行外部代码的系统,系统架构上是开放的,能非常方便的扩展更多的编程语言;2.系统对每份运行的代码都是线程隔离的,不同用户之间互不影响,即使有代码是死循环,也不会影响其它代码运行;3.本产品在底层封装了运行的具体细节,以事件驱动的方式提供接口给应用层,性能非常高,适合用来实现大规模在线教学应用。附图说明图1为本专利技术中命令行调用的示意图;图2、图3为本专利技术的动态编译运行外部代码的系统的结构框图。具体实施方式为了使本
的人员更好的理解专利技术方案,下面将结合具体实施例及附图,对专利技术的技术方案进行清楚、完整的描述。实施例1:如图2、图3所示,一种动态编译运行外部代码的系统,包括:主应用,设定主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;运行主线程:负责独立编译运行一段代码,由于每段代码都在一个运行主线程里面运行,多用户可以互不影响;运行主线程包括:由Runtime发起的运行进程、输入接口、输出接口三部分组成,其中:Runtime的exec方法调用命令行编译和运行指令,自动生成一个运行进程,执行代码的编译运行;输入接口负责接收主应用上用户的输入信息,发送给运行进程的输入流,由运行进程接收处理;输出接口负责监听运行进程的输出流,当由输出信息产生时,读取信息,发送给主应用进行显示;由Runtime发起的运行进程、输入接口、输出接口三部分都以独立线程的方式存在,互不干扰。超时控制线程:负责监控某段代码的运行是否超时,如果超时则停止运行并调用超时事件。下述为对本专利技术动态编译运行外部代码的系统的详细说明:1、命令行调用:任何语言都存在编译和运行的命令行指令,例如:C/C++用gcc命令编译,用文件名运行;而java使用javac命令进行编译,用java命令进行运行。在JAVA应用里面通过调用Runtime接口,即可调用外部命令行指令,通过封装以上每种语言的命令行指令,即可实现基本的编译和运行功能,如图1所示;2、输入输出接口:当调用Runtime.exec执行外部指令时,jvm会启动一个运行进程进行调用,此时此进程拥有自己的输入输出流,而主应用的进程需要接管运行进程的输入输出流,如图2所示;其中:输入接口和输出接口都是以线程的方式存在,与主进程(运行进程)独立,互不干扰;当运行进程有产生输出时(如代码里的printf语句),输出接口会读取到运行进程的输出流产生的输出信息,发送给主应用进行显示;当主应用上用户输入时,通过输入接口发送给运行进程,运行进程的输入流接收到输入信息,进行处理。通过以上独立的输入输出接口的设计,引擎实现了几个场景:(1)延迟输出:不管什么时候产生输出,输出接口都能捕获,发送给主应用显示。(2)多线程输出:多线程共享运行进程的输出流,按照次序都会被输出接口捕获,依次发送给主应用显示。(3)输入:当代码需要等待输入时,运行进程会被自动阻塞,等待输入接口的信息。当接收到输入信息时才会解除阻塞进行处理。(4)输出输入配合:如果代码的逻辑是先提示用户输入,然后对用户输入进行处理,则按照时间顺序,主应用会先接收输出并显示第一次输出的提示信息,然后发送用户的输入给输入接口,再接收到处理后的输出信息并显示。例如:第一次输出:“请输入您的姓名:”等待用户输入:“张三”第二次输出:“张三先生,欢迎您”。3、超时处理通常代码执行结束,运行进程也就自动被销毁,但有时代码可能存在死循环或者本文档来自技高网
...
一种动态编译运行外部代码的系统及其方法

【技术保护点】
一种动态编译运行外部代码的系统,包括:主应用,并设定主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;运行主线程:负责独立编译运行一段代码,由于每段代码都在一个运行主线程里面运行,多用户可以互不影响;超时控制线程:负责监控某段代码的运行是否超时,如果超时则停止运行并调用超时事件。

【技术特征摘要】
1.一种动态编译运行外部代码的系统,包括:主应用,并设定主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;运行主线程:负责独立编译运行一段代码,由于每段代码都在一个运行主线程里面运行,多用户可以互不影响;超时控制线程:负责监控某段代码的运行是否超时,如果超时则停止运行并调用超时事件。2.根据权利要求1所述的动态编译运行外部代码的系统,其特征在于:所述运行主线程包括:由Runtime发起的运行进程、输入接口、输出接口三部分组成,其中:Runtime的exec方法调用命令行编译和运行指令,自动生成一个运行进程,执行代码的编译运行;输入接口负责接收主应用上用户的输入信息,发送给运行进程的输入流,由运行进程接收处理;输出接口负责监听运行进程的输出流,当由输出信息产生时,读取信息,发送给主应用进行显示。3.根据权利要求2所述的动态编译运行外部代码的系统,其特征在于:所述:由Runtime发起的运行进程、输入接口、输出接口三部分都以独立线程的方式存在,互不干扰。4.一种动态编译运行外部代码的方法,包括如下步骤:S1:设定某一主应用为调用者,其中,主应用指接收用户输入的代码及输入信息的应用,调用代码运行引擎并返回输出信息给用户;S2:运行主应用,启动运行主线程,其中,运行主线程为负责独立编译运行一段代码;S3:启动超时...

【专利技术属性】
技术研发人员:陈跃坚
申请(专利权)人:杭州华恩教育科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1