2016-08-29 7 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(); 

StopWatchSystem.nanoTime()を使用して、経過時間を計算し、私の記述されたクラスです。

+0

あなたはそれを行うことができます[http://stackoverflow.com/questions/8255738/is-there-a- stopwatch-in-java)、または[this one](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; 

提供あなたのスレッドは中断されませんし、タスクが停止します。あなたは新しいスレッドでそれを開始し、あなたの時間制限を超えたときにそれを中断することができます。

残念なことに、おそらくプロセスの実行時間の概念が非常に異なるOS間でできるため(特に、プロセッサ時間、ユーザー空間時間、カーネル空間時間、単調な時計の時間?これらはすべて処理する必要があります、そしてそれは単なるgenerixです* NIX)

+0

私は現在これをやっています。私は別の方法があると思った。 :/ – seal

+2

@seal - 残念ながら、そのタスクのためのインターフェースはないと思います。たぶん、プロセス実行時間の概念は非常に異なるOS間でできるので(プロセッサ時間、ユーザー空間時間、カーネル空間時間、単調時間に興味がありますか?これらはすべて処理しなければならず、それは単なる* NIXです) – mszymborski

+0

あなたは前のコメントをあなたの答えに加えてください。 :) – seal

関連する問題