我编写了一个java程序,可以编译,执行其他提交的代码(cpp,java)。我正在使用java的进程类。流程类调用g++
或java compiler
。出于某种目的,我需要知道该进程的实际执行时间或代码执行的时间。
process.waitFor(2000, TimeUnit.MILLISECONDS)
此过程正在等待2000毫秒但如果过程在不到2000毫秒内完成,我怎么知道该过程需要多长时间?
======更新===== 我目前这样做是一种古老的方式。
StopWatch.Start();
process.waitFor(dto.getTimeLimit(), TimeUnit.MILLISECONDS)
long timeEplased = StopWatch.Stop();
StopWatch
是我写的课程,用System.nanoTime()
计算经过的时间。
答案 0 :(得分:0)
这样做就足够了:
long before = System.nanoTime();
process.waitFor();
long durationMs = (System.nanoTime() - before)/1_000_000;
如果您的线程没有中断并且任务停止。您可以在新线程中启动它,并在超出时间限制时中断它。
不幸的是,我认为没有专门用于该任务的专用接口 - 可能是因为进程运行时的概念可能在不同的操作系统之间(您对处理器时间,用户空间时间,内核空间时间感兴趣) ,单调的时钟时间?这些都必须处理,这只是一个generix * NIX)