Struct rutie::Thread [−][src]
Thread
Implementations
impl Thread
[src]
pub fn new<F, R>(func: F) -> Self where
F: FnMut() -> R,
R: Object,
[src]
F: FnMut() -> R,
R: Object,
Creates a new green thread.
The returning value of the closure will be available as #value
of the thread
Examples
use rutie::{Fixnum, Thread, VM}; Thread::new(|| { let computation_result = 1 + 2; Fixnum::new(computation_result) });
Ruby:
Thread.new do
computation_result = 1 + 2
computation_result
end
pub fn wait_fd(fd: RawFd)
[src]
Tells scheduler to switch to other threads while current thread is waiting for a readable event on the given file descriptor.
Examples
use std::os::unix::io::AsRawFd; use std::os::unix::net::UnixStream; use rutie::{Thread, VM}; let (unix_socket, _) = UnixStream::pair().unwrap(); Thread::wait_fd(unix_socket.as_raw_fd());
pub fn call_without_gvl<F, R, G>(func: F, unblock_func: Option<G>) -> R where
F: FnMut() -> R,
G: FnMut(),
[src]
F: FnMut() -> R,
G: FnMut(),
Release GVL for current thread.
Warning! Due to MRI limitations, interaction with Ruby objects is not allowed while GVL is released, it may cause unexpected behaviour. Read more at Ruby documentation
You should extract all the information from Ruby world before invoking
thread_call_without_gvl
.
GVL will be re-acquired when the closure is finished.
Examples
#[macro_use] extern crate rutie; use rutie::{Class, Fixnum, Object, Thread}; class!(Calculator); methods!( Calculator, rtself, fn heavy_computation() -> Fixnum { let computation = || { 2 * 2 }; let unblocking_function = || {}; // release GVL for current thread until `computation` is completed let result = Thread::call_without_gvl( computation, Some(unblocking_function) ); // GVL is re-acquired, we can interact with Ruby-world Fixnum::new(result) } ); fn main() { Class::new("Calculator", None).define(|klass| { klass.def("heavy_computation", heavy_computation); }); }
pub fn call_without_gvl2<F, R, G>(func: F, unblock_func: Option<G>) -> R where
F: FnMut() -> R,
G: FnMut(),
[src]
F: FnMut() -> R,
G: FnMut(),
pub fn call_with_gvl<F, R>(func: F) -> R where
F: FnMut() -> R,
[src]
F: FnMut() -> R,
Trait Implementations
impl Debug for Thread
[src]
impl From<Value> for Thread
[src]
impl Into<AnyObject> for Thread
[src]
impl Into<Value> for Thread
[src]
impl Object for Thread
[src]
fn value(&self) -> Value
[src]
fn class(&self) -> Class
[src]
fn singleton_class(&self) -> Class
[src]
fn get_data<'a, T>(&'a self, wrapper: &'a dyn DataTypeWrapper<T>) -> &T
[src]
fn get_data_mut<'a, T>(
&'a mut self,
wrapper: &'a dyn DataTypeWrapper<T>
) -> &mut T
[src]
&'a mut self,
wrapper: &'a dyn DataTypeWrapper<T>
) -> &mut T
fn define<F: Fn(&mut Self)>(&mut self, f: F) -> &Self
[src]
fn define_method<I: Object, O: Object>(
&mut self,
name: &str,
callback: Callback<I, O>
)
[src]
&mut self,
name: &str,
callback: Callback<I, O>
)
fn define_private_method<I: Object, O: Object>(
&mut self,
name: &str,
callback: Callback<I, O>
)
[src]
&mut self,
name: &str,
callback: Callback<I, O>
)
fn define_singleton_method<I: Object, O: Object>(
&mut self,
name: &str,
callback: Callback<I, O>
)
[src]
&mut self,
name: &str,
callback: Callback<I, O>
)
fn def<I: Object, O: Object>(&mut self, name: &str, callback: Callback<I, O>)
[src]
fn def_private<I: Object, O: Object>(
&mut self,
name: &str,
callback: Callback<I, O>
)
[src]
&mut self,
name: &str,
callback: Callback<I, O>
)
fn def_self<I: Object, O: Object>(
&mut self,
name: &str,
callback: Callback<I, O>
)
[src]
&mut self,
name: &str,
callback: Callback<I, O>
)
unsafe fn send(&self, method: &str, arguments: &[AnyObject]) -> AnyObject
[src]
fn equals<T: Object>(&self, other: &T) -> bool
[src]
fn case_equals<T: Object>(&self, other: &T) -> bool
[src]
fn is_eql<T: Object>(&self, other: &T) -> bool
[src]
fn is_equal<T: Object>(&self, other: &T) -> bool
[src]
fn respond_to(&self, method: &str) -> bool
[src]
fn protect_send(
&self,
method: &str,
arguments: &[AnyObject]
) -> Result<AnyObject, AnyException>
[src]
&self,
method: &str,
arguments: &[AnyObject]
) -> Result<AnyObject, AnyException>
fn protect_public_send(
&self,
method: &str,
arguments: &[AnyObject]
) -> Result<AnyObject, AnyException>
[src]
&self,
method: &str,
arguments: &[AnyObject]
) -> Result<AnyObject, AnyException>
fn is_nil(&self) -> bool
[src]
fn to_any_object(&self) -> AnyObject
[src]
fn instance_variable_get(&self, variable: &str) -> AnyObject
[src]
fn instance_variable_set<T: Object>(
&mut self,
variable: &str,
value: T
) -> AnyObject
[src]
&mut self,
variable: &str,
value: T
) -> AnyObject
fn is_frozen(&self) -> bool
[src]
fn freeze(&mut self) -> Self
[src]
unsafe fn to<T: Object>(&self) -> T
[src]
fn try_convert_to<T: VerifiedObject>(&self) -> Result<T, AnyException>
[src]
fn ty(&self) -> ValueType
[src]
impl PartialEq<Thread> for Thread
[src]
impl VerifiedObject for Thread
[src]
fn is_correct_type<T: Object>(object: &T) -> bool
[src]
fn error_message() -> &'static str
[src]
Auto Trait Implementations
impl RefUnwindSafe for Thread
[src]
impl Send for Thread
[src]
impl Sync for Thread
[src]
impl Unpin for Thread
[src]
impl UnwindSafe for Thread
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,