2016-08-29 1 views
0

Я написал программу java, которая может компилировать, выполнять другие отправленные коды (cpp, java). Я делаю это, используя класс процессов java. Класс процесса вызывает g++ или java compiler. Для какой-то цели мне нужно знать, каково фактическое время выполнения этого процесса или сколько времени требуется для выполнения кода.Как измерить фактическое время работы Java-процесса?

process.waitFor(2000, TimeUnit.MILLISECONDS) 

Этот процесс ждет 2000 milisecond, но если процесс осуществляется менее чем за 2000 milisecond, как я могу знать, что это время, когда процесс происходит?

====== Обновление ===== В настоящее время я делаю это как старый способ.

StopWatch.Start(); 
process.waitFor(dto.getTimeLimit(), TimeUnit.MILLISECONDS) 
long timeEplased = StopWatch.Stop(); 

StopWatch мой написал класс, вычислить время, прошедшее с использованием System.nanoTime().

+0

Вы можете это сделать [как это] (http://stackoverflow.com/questions/8255738/is-there-a- секундомер в java) или использовать существующие инструменты, такие как [этот] (https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Stopwatch.html) – alfasin

+0

@ альфасин действительно? В настоящее время я это делаю. Есть ли более разумный способ? Я собираюсь обновить свой вопрос, что я делаю прямо сейчас. – seal

+0

"действительно?" - да. Это простая задача, сделав ее «более умной», и вы наверняка закончите чрезмерно сложную реализацию. Держите его простой почки. – alfasin

ответ

0

Это должно быть достаточно, чтобы сделать это так:

long before = System.nanoTime(); 

    process.waitFor(); 

    long durationMs = (System.nanoTime() - before)/1_000_000; 

условии, что ваш поток не прерывается, и задача останавливается. Вы можете запустить это в новом потоке и прервать его, когда ваш предел превышен.

Я не думаю, что есть специальный интерфейс для конкретной задачи, к сожалению - вероятно, потому, что концепция времени выполнения процесса может очень сильно отличаться между различными ОС (вас интересует время процессора, время в пространстве пользователя, время ядра, монотонное время в часах? Все это должно быть обработано, и это всего лишь generix * NIX)

+0

В настоящее время я это делаю. Я думал, что есть другой путь. :/ – seal

+2

@seal - Я не думаю, что есть интерфейс для конкретной задачи, к сожалению. Наверное, потому что концепция времени выполнения процесса может очень сильно отличаться между различными ОС (вас интересует время процессора, время в пространстве пользователя, время ядра, однообразное время? Все это нужно обрабатывать, и это просто generix * NIX) – mszymborski

+0

Я думаю вы должны добавить свой предыдущий комментарий к своему ответу. :) – seal