1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
// License: see LICENSE file at root directory of `master` branch //! # Blackhole //! //! _...to throw your threads into._ //! //! ## Project //! //! - Repository: <https://bitbucket.org/haibison/blackhole-rs> //! - License: [Free Public License 1.0.0](https://opensource.org/licenses/FPL-1.0.0) //! - _This project follows [Semantic Versioning 2.0.0]_ //! //! ## Features //! //! - Simple thread manager. //! - Threads' panics are printed to stderr. //! - TODO //! //! ## Design //! //! It uses a [channel][std::sync::mpsc] and 2 threads: //! //! - Manager: holds jobs in a queue. //! - Runner: constantly contacts manager to ask for new jobs to run. //! //! ## Examples //! //! ``` //! use blackhole::Blackhole; //! //! let active_limit: u64 = 10; //! let queue_limit: usize = 1_000; //! let blackhole = Blackhole::new(active_limit, queue_limit).unwrap(); //! for i in 0..20 { //! blackhole.throw(move || { //! println!("i = {:02}", i); //! }); //! } //! blackhole.escape_on_idle().unwrap(); //! ``` //! //! [Semantic Versioning 2.0.0]: https://semver.org/spec/v2.0.0.html //! [std::sync::mpsc]: https://doc.rust-lang.org/std/sync/mpsc/index.html #![warn(missing_docs)] #[macro_use] #[allow(unused_macros)] mod __; mod root; pub use root::*; // ╔═════════════════╗ // ║ IDENTIFIERS ║ // ╚═════════════════╝ macro_rules! code_name { () => { "blackhole" }} macro_rules! version { () => { "0.3.0" }} /// # Crate name pub const NAME: &'static str = "Blackhole"; /// # Crate code name pub const CODE_NAME: &'static str = code_name!(); /// # Crate version pub const VERSION: &'static str = version!(); /// # Crate release date (year/month/day) pub const RELEASE_DATE: (u16, u8, u8) = (2019, 2, 16); /// # Unique universally identifier of this crate pub const UUID: &'static str = "f611f491-608a-44a1-8831-594a58c4c202"; /// # Tag, which can be used for logging... pub const TAG: &'static str = concat!(code_name!(), "::f611f491::", version!()); // ╔════════════════════╗ // ║ IMPLEMENTATION ║ // ╚════════════════════╝ #[test] fn test_crate_version() { assert_eq!(VERSION, env!("CARGO_PKG_VERSION")); }