2017-11-09 12 views
1

1秒間隔後に1つのアイテムを放出するタイマーがあるとします。観測値から最新の値を得る方法

私はそれを購読して10秒間実行したいと思います。 10秒後に私はそれから退会し、コードの他の部分からの最後のemmited値にアクセスできるようにしたい。コードのohter一部から最後emited値を取得する方法はあり

@Test 
fun testMeasuretime(){ 

    val emitter = Observable.interval(1, TimeUnit.SECONDS) 
      .doOnNext{t: Long? -> Log.v("emitter", t.toString())} 

    val disposable = emitter.subscribe() 
    Thread.sleep(10000) 

    disposable.dispose() 

    Thread.sleep(5000) 

//get the last emited value 

    Thread.sleep(5000) 

} 

:ここ は、サンプルコードですか? 私は、このソリューションを使用して、あるタスクの実行時間を測定したいと考えています。

+0

より良いアプローチは(私がKotlinを知らないので、Javaで書かれた)のようなものでしょうか?なぜ、測定の開始時と終了時に 'System.currentTimeMillis()'を使用しないのですか? – akarnokd

+0

これは、測定を開始した関数と同じスコープではありません。他のスレッドやコールバックにもあります。しかし、これはあなたが提案していることを示唆しているかもしれません。 – Konrad

+0

値を保存するには別の変数/フィールドが必要です。 –

答えて

0

doOnNext()を使用してクラスフィールドの値を設定するか、パスにBehaviorSubjectを挿入して、最後の値を取得できます。

しかし、私はあなたのコードが実際にタスクの実行のCPU時間を測定しているとは思わない。代わりに、関係のないスレッドで処理の開始点と終了点をキャプチャしています。だから、あなたが得ることができる最高の壁時計の時間です。この他の部分は何

long start = System.nanoTime(); 
performTaskOnThisThread(); 
long end = System.nanoTime(); 
long durationInNanoSeconds = end - start; 
関連する問題