2个稳定版本
使用旧的Rust 2015
1.1.0 | 2019年7月25日 |
---|---|
1.0.0 | 2018年10月10日 |
#1062 在 Rust模式
1,349 每月下载量
用于 12 个crate(7个直接使用)
7KB
progress-streams
一个Rust crate,为实现io::Read
或io::Write
类型的类型提供进度回调。
示例
读取器
extern crate progress_streams;
use progress_streams::ProgressReader;
use std::fs::File;
use std::io::Read;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::thread;
use std::time::Duration;
fn main() {
let total = Arc::new(AtomicUsize::new(0));
let mut file = File::open("/dev/urandom").unwrap();
let mut reader = ProgressReader::new(&mut file, |progress: usize| {
total.fetch_add(progress, Ordering::SeqCst);
});
{
let total = total.clone();
thread::spawn(move || {
loop {
println!("Read {} KiB", total.load(Ordering::SeqCst) / 1024);
thread::sleep(Duration::from_millis(16));
}
});
}
let mut buffer = [0u8; 8192];
while total.load(Ordering::SeqCst) < 100 * 1024 * 1024 {
reader.read(&mut buffer).unwrap();
}
}
写入器
extern crate progress_streams;
use progress_streams::ProgressWriter;
use std::io::{Cursor, Write};
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::thread;
use std::time::Duration;
fn main() {
let total = Arc::new(AtomicUsize::new(0));
let mut file = Cursor::new(Vec::new());
let mut writer = ProgressWriter::new(&mut file, |progress: usize| {
total.fetch_add(progress, Ordering::SeqCst);
});
{
let total = total.clone();
thread::spawn(move || {
loop {
println!("Written {} Kib", total.load(Ordering::SeqCst) / 1024);
thread::sleep(Duration::from_millis(16));
}
});
}
let buffer = [0u8; 8192];
while total.load(Ordering::SeqCst) < 1000 * 1024 * 1024 {
writer.write(&buffer).unwrap();
}
}