スポンサーリンク
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); }); }
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); }
結果
表示だけなら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