Struct napi::threadsafe_function::ThreadsafeFunction [−][src]
pub struct ThreadsafeFunction<T: 'static, ES: T = CalleeHandled> { /* fields omitted */ }
Expand description
Communicate with the addon’s main thread by invoking a JavaScript function from other threads.
Example
An example of using ThreadsafeFunction
:
#[macro_use]
extern crate napi_derive;
use std::thread;
use napi::{
threadsafe_function::{
ThreadSafeCallContext, ThreadsafeFunctionCallMode, ThreadsafeFunctionReleaseMode,
},
CallContext, Error, JsFunction, JsNumber, JsUndefined, Result, Status,
};
#[js_function(1)]
pub fn test_threadsafe_function(ctx: CallContext) -> Result<JsUndefined> {
let func = ctx.get::<JsFunction>(0)?;
let tsfn =
ctx
.env
.create_threadsafe_function(&func, 0, |ctx: ThreadSafeCallContext<Vec<u32>>| {
ctx.value
.iter()
.map(|v| ctx.env.create_uint32(*v))
.collect::<Result<Vec<JsNumber>>>()
})?;
let tsfn_cloned = tsfn.clone();
thread::spawn(move || {
let output: Vec<u32> = vec![0, 1, 2, 3];
// It's okay to call a threadsafe function multiple times.
tsfn.call(Ok(output.clone()), ThreadsafeFunctionCallMode::Blocking);
});
thread::spawn(move || {
let output: Vec<u32> = vec![3, 2, 1, 0];
// It's okay to call a threadsafe function multiple times.
tsfn_cloned.call(Ok(output.clone()), ThreadsafeFunctionCallMode::NonBlocking);
});
ctx.env.get_undefined()
}
Implementations
See napi_create_threadsafe_function for more information.
See napi_ref_threadsafe_function for more information.
“ref” is a keyword so that we use “refer” here.
See napi_unref_threadsafe_function for more information.
Get the raw ThreadSafeFunction
pointer
See napi_call_threadsafe_function for more information.
See napi_call_threadsafe_function for more information.
Trait Implementations
Auto Trait Implementations
impl<T, ES> RefUnwindSafe for ThreadsafeFunction<T, ES> where
ES: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, ES> Unpin for ThreadsafeFunction<T, ES> where
ES: Unpin,
T: Unpin,
impl<T, ES> UnwindSafe for ThreadsafeFunction<T, ES> where
ES: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more