スポンサーリンク

Rustでタイマー

C言語のタイマーと違い、精度の高いタイマーが標準で使用できる。ただし精度は環境依存なので、比較的新しい環境だとマイクロ秒,ナノ秒単位で取得できるが、そうでない場合も考えられる。

fn main() {

    // 時間計測開始
    let mytimer = std::time::Instant::now();

    use_rand();

    // 時間計測終了
    let elapsed = mytimer.elapsed();

    // 経過時間を表示
    println!("{:?}",elapsed);


}

fn use_rand(){
    use rand::Rng; // 乱数を使うためにrand::Rngを使用

    let mut rng = rand::thread_rng();

    let min:i32 = 0;
    let max:i32 = 20;
    
    (0..5000).for_each(|_|{

        let randint:i32 = rng.gen_range(min..max); // 最大・最小を指定して乱数を生成

        println!("{}",randint);

    });

}

Sleep時間も計測する

CのclockなどはCPU時間なので、Sleep時間がタイマーに反映されないが、Rustのstd::timeはちゃんとSleep時間も含んだ結果が得られる。

fn main() {

    // 時間計測開始
    let mytimer = std::time::Instant::now();

    // 5秒間スリープ
    std::thread::sleep(std::time::Duration::from_secs(5));

    // 時間計測終了
    let elapsed = mytimer.elapsed();

    // 経過時間を表示
    println!("{:?}",elapsed);


}

結果

5.0009648s

値の取得

表示だけならDuration型に対して{:?}すればよいが、値を取り出す場合は以下のようにする。

    // 経過時間を表示
    println!("second i32 {}",elapsed.as_secs());
    println!("second f32 {}",elapsed.as_secs_f32());
    println!("micro second {}",elapsed.as_micros());
    println!("nano second {}",elapsed.as_nanos());

結果

second i32 5
second f32 5.000559
micro second 5000558
nano second 5000558900

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: