[][src]Crate slave_pool

Simple thread pool

Usage

use slave_pool::ThreadPool;
const SECOND: core::time::Duration = core::time::Duration::from_secs(1);

static POOL: ThreadPool = ThreadPool::new();

POOL.set_threads(8); //Tell how many threads you want

let mut handles = Vec::new();
for idx in 0..8 {
    handles.push(POOL.spawn_handle(move || {
        std::thread::sleep(SECOND);
        idx
    }));
}

POOL.set_threads(0); //Tells to shut down threads

for (idx, handle) in handles.drain(..).enumerate() {
    assert_eq!(handle.wait().unwrap(), idx) //Even though we told  it to shutdown all threads, it is going to finish queued job first
}

let handle = POOL.spawn_handle(|| {});
assert!(handle.wait_timeout(SECOND).is_err()); // All are shutdown now

POOL.set_threads(1); //But let's add one more

assert!(handle.wait().is_ok());

let handle = POOL.spawn_handle(|| panic!("Oh no!")); // We can panic, if we want

assert!(handle.wait().is_err()); // In that case we'll get error, but thread will be ok

let handle = POOL.spawn_handle(|| {});

POOL.set_threads(0);

assert!(handle.wait().is_ok());

Structs

JobHandle

Handle to the job, allowing to await for it to finish

ThreadPool

Thread pool that allows to change number of threads at runtime.

Enums

JoinError

Describes possible reasons for join to fail