4 个版本 (2 个破坏性更新)

0.3.1 2024年5月7日
0.3.0 2024年2月25日
0.2.0 2024年2月19日
0.1.0 2024年2月15日

#10 in #mpsc

Download history 86/week @ 2024-05-03 11/week @ 2024-05-10 3/week @ 2024-05-17 3/week @ 2024-05-24 1/week @ 2024-05-31 3/week @ 2024-06-28 14/week @ 2024-07-05 21/week @ 2024-07-12 27/week @ 2024-07-19 39/week @ 2024-07-26 1/week @ 2024-08-02

每月 88 次下载

MPL-2.0 许可证

61KB
1K SLoC

情况报告

Crates.io Crates.io Crates.io docs.rs

前端无关的进度报告。


用法

use std::{sync::{mpsc, Arc}, thread, time::Duration};

use sitrep::{
    Event, MessageEvent, Progress, DetachmentEvent, Reporter, StdMpscObserver, Task, UpdateEvent,
};

fn main() {
    let (sender, receiver) = mpsc::channel();
    let observer = Arc::new(StdMpscObserver::from(sender));

    let (progress, reporter) = Progress::new(Task::default(), observer);

    // The sending end of the progress report:
    let worker_handle = thread::spawn(move || {
        progress.set_label("Crunching numbers ...".to_owned());

        let total = 100;
        progress.set_total(total);

        for completed in 1..=total {
            thread::sleep(Duration::from_millis(100));

            progress.set_completed(completed);
        }
    });

    // The receiving end of the progress report:
    let reporter_handle = thread::spawn(move || {
        while let Ok(event) = receiver.recv() {
            let Event::Update(UpdateEvent { id }) = event else {
                continue;
            };

            // The reporter is only available as long as
            // the corresponding progress is alive, too:
            let Some(reporter) = reporter.upgrade() else {
                break;
            };

            println!("{:#?}", reporter.report());
        }
    });

    worker_handle.join().unwrap();
    reporter_handle.join().unwrap();
}

更多示例,请参阅 示例目录

文档

请参阅 docs.rs 上的文档。

贡献

请阅读 CONTRIBUTING.md 了解我们的 行为准则
以及向我们提交拉取请求的流程。

版本控制

我们使用 SemVer 进行版本控制。有关可用的版本,请参阅 此存储库的标签

许可证

本项目采用 MPL-2.0 许可 — 有关详细信息,请参阅 LICENSE.md 文件。

依赖项

~0.4–6.5MB
~26K SLoC