[][src]Struct rutie::Thread

pub struct Thread { /* fields omitted */ }

Thread

Methods

impl Thread[src]

pub fn new<F, R>(func: F) -> Self where
    F: FnMut() -> R,
    R: Object
[src]

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]

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,
    itself,

    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(|itself| {
        itself.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]

pub fn call_with_gvl<F, R>(func: F) -> R where
    F: FnMut() -> R, 
[src]

Trait Implementations

impl Object for Thread[src]

fn class(&self) -> Class[src]

Returns a class of current object. Read more

fn singleton_class(&self) -> Class[src]

Returns a singleton class of current object. Read more

fn get_data<'a, T>(&'a self, wrapper: &'a dyn DataTypeWrapper<T>) -> &T[src]

Gets an immutable reference to the Rust structure which is wrapped into a Ruby object. Read more

fn get_data_mut<'a, T>(
    &'a mut self,
    wrapper: &'a dyn DataTypeWrapper<T>
) -> &mut T
[src]

Gets a mutable reference to the Rust structure which is wrapped into a Ruby object.

fn define<F: Fn(&mut Self)>(&mut self, f: F) -> &Self[src]

Wraps calls to the object. Read more

fn define_method<I: Object, O: Object>(
    &mut self,
    name: &str,
    callback: Callback<I, O>
)
[src]

Defines an instance method for the given class or object. Read more

fn define_private_method<I: Object, O: Object>(
    &mut self,
    name: &str,
    callback: Callback<I, O>
)
[src]

Defines a private instance method for the given class or object. Read more

fn define_singleton_method<I: Object, O: Object>(
    &mut self,
    name: &str,
    callback: Callback<I, O>
)
[src]

Defines a class method for given class or singleton method for object. Read more

fn def<I: Object, O: Object>(&mut self, name: &str, callback: Callback<I, O>)[src]

An alias for define_method (similar to Ruby syntax def some_method).

fn def_private<I: Object, O: Object>(
    &mut self,
    name: &str,
    callback: Callback<I, O>
)
[src]

An alias for define_private_method (similar to Ruby syntax private def some_method).

fn def_self<I: Object, O: Object>(
    &mut self,
    name: &str,
    callback: Callback<I, O>
)
[src]

An alias for define_singleton_method (similar to Ruby def self.some_method).

unsafe fn send(&self, method: &str, arguments: &[AnyObject]) -> AnyObject[src]

Calls a given method on an object similarly to Ruby Object#send method Read more

fn equals<T: Object>(&self, other: &T) -> bool[src]

Alias for Ruby's == Read more

fn case_equals<T: Object>(&self, other: &T) -> bool[src]

Alias for Ruby's === Read more

fn is_eql<T: Object>(&self, other: &T) -> bool[src]

Alias for Ruby's eql? Read more

fn is_equal<T: Object>(&self, other: &T) -> bool[src]

Alias for Ruby's equal? Read more

fn respond_to(&self, method: &str) -> bool[src]

Checks whether the object responds to given method Read more

fn protect_send(
    &self,
    method: &str,
    arguments: &[AnyObject]
) -> Result<AnyObject, AnyException>
[src]

protect_send returns Result<AnyObject, AnyObject> Read more

fn protect_public_send(
    &self,
    method: &str,
    arguments: &[AnyObject]
) -> Result<AnyObject, AnyException>
[src]

protect_public_send returns Result<AnyObject, AnyObject> Read more

fn is_nil(&self) -> bool[src]

Checks whether the object is nil Read more

fn to_any_object(&self) -> AnyObject[src]

Converts struct to AnyObject Read more

fn instance_variable_get(&self, variable: &str) -> AnyObject[src]

Gets an instance variable of object Read more

fn instance_variable_set<T: Object>(
    &mut self,
    variable: &str,
    value: T
) -> AnyObject
[src]

Sets an instance variable for object Read more

fn is_frozen(&self) -> bool[src]

Returns the freeze status of the object. Read more

fn freeze(&mut self) -> Self[src]

Prevents further modifications to the object. Read more

unsafe fn to<T: Object>(&self) -> T[src]

Unsafely casts current object to the specified Ruby type Read more

fn try_convert_to<T: VerifiedObject>(&self) -> Result<T, AnyException>[src]

Safely casts current object to the specified Ruby type Read more

fn ty(&self) -> ValueType[src]

Determines the value type of the object Read more

impl VerifiedObject for Thread[src]

impl PartialEq<Thread> for Thread[src]

#[must_use] fn ne(&self, other: &Rhs) -> bool1.0.0[src]

This method tests for !=.

impl From<Value> for Thread[src]

impl Into<Value> for Thread[src]

impl Into<AnyObject> for Thread[src]

impl Debug for Thread[src]

Auto Trait Implementations

impl Send for Thread

impl Unpin for Thread

impl Sync for Thread

impl RefUnwindSafe for Thread

impl UnwindSafe for Thread

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]