2017-08-25 6 views
0

現在、Javaで長時間実行されているプロセスの進行を実装しようとしています。 現在のロジックに基づいて、私はプログラムが単一の計算単位のために取られた時間を使用することに基づいて終了するときのおおよその時間を計算しようとしています。例:私は複数のベンダーに送付される請求書の進捗状況を確認しており、各請求書には10秒かかります。したがって、これに基づいて、保留中の請求書の残りの時間を計算します。Javaで推定されたプログラムの終了時間に基づいて、任意の時点で完了したパーセンテージを計算します。

私は開始時間をミリ秒単位で保持しています。

long startmillis = System.currentTimeMillis(); 
long finishmillisforsingleVendor = System.currentTimeMillis(); 

long elapsedTime = finishmillisforsingleVendor - startmillis; 

long approximateEndTime = elapsedTime/1000 * 25;// trying to calculate in seconds and multiply with 25 remaining invoices. 

これはわかりません。プログラムの終了時間を導出するために、単一請求書にこの経過時間をどのように使用しますか?

long percentageCompleted = System.currentTimeMillis()/1000/approximateEndTime ; 

私は、これまでにどのくらい進んでいるかをユーザに示すために、ある時点でパーセンテージを計算しようとしています。私はこれが正しい方法であるかどうかは分かりません。あなたの質問を言葉で表現方法から

おかげ

+1

は整数演算における除算の落とし穴に注意してください:

double percentComplete = 100.0*numberOfDocumentsCompleted/totalNumberOfDocuments; 

けれどもが、代わりにパーセントの、私は、単純な比率を好むだろう。 – Bathsheba

答えて

0

は、私はあなたがいくつかの用語を混乱している疑いがあります。完了したパーセンテージは経過時間とは関係ありません。

double completionStatus = (double)numberOfDocumentsCompleted/totalNumberOfDocuments; 
long elapsedMillis = System.currentTimeMillis() - startMillis; 
long estimatedTotalMillis = (long) (elapsedMillis/completionStatus); 
long remainingMillis = estimatedTotalMillis - elapsedMillis; 
+0

はい、あなたは正しいです。私はちょっと混乱して別のアプローチをとっていました。最初の解決策としての簡単な解決策が私の問題に対処します。ありがとう。 – Franky

関連する問題