Add sleep.
This commit is contained in:
parent
b35d965e55
commit
cbb1c5c6a0
@ -24,6 +24,7 @@ Enhancements
|
|||||||
* `FnAccess` and `FnNamespace` now implement `Ord` and `PartialOrd`.
|
* `FnAccess` and `FnNamespace` now implement `Ord` and `PartialOrd`.
|
||||||
* The `event_handler_map` example is enhanced to prevent shadowing of the state object map.
|
* The `event_handler_map` example is enhanced to prevent shadowing of the state object map.
|
||||||
* Separation of constants in function calls is removed as its performance benefit is dubious.
|
* Separation of constants in function calls is removed as its performance benefit is dubious.
|
||||||
|
* A function `sleep` is added to block the current thread by a specified number of seconds.
|
||||||
|
|
||||||
|
|
||||||
Version 1.5.0
|
Version 1.5.0
|
||||||
|
@ -5,6 +5,9 @@ use crate::{Dynamic, RhaiResultOf, ERR, INT};
|
|||||||
#[cfg(feature = "no_std")]
|
#[cfg(feature = "no_std")]
|
||||||
use std::prelude::v1::*;
|
use std::prelude::v1::*;
|
||||||
|
|
||||||
|
#[cfg(not(feature = "no_float"))]
|
||||||
|
use crate::FLOAT;
|
||||||
|
|
||||||
def_package! {
|
def_package! {
|
||||||
/// Package of core language features.
|
/// Package of core language features.
|
||||||
pub LanguageCorePackage(lib) {
|
pub LanguageCorePackage(lib) {
|
||||||
@ -21,10 +24,32 @@ def_package! {
|
|||||||
|
|
||||||
#[export_module]
|
#[export_module]
|
||||||
mod core_functions {
|
mod core_functions {
|
||||||
|
/// Return the _tag_ of a `Dynamic` value.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```rhai
|
||||||
|
/// let x = "hello, world!";
|
||||||
|
///
|
||||||
|
/// x.tag = 42;
|
||||||
|
///
|
||||||
|
/// print(x.tag); // prints 42
|
||||||
|
/// ```
|
||||||
#[rhai_fn(name = "tag", get = "tag", pure)]
|
#[rhai_fn(name = "tag", get = "tag", pure)]
|
||||||
pub fn get_tag(value: &mut Dynamic) -> INT {
|
pub fn get_tag(value: &mut Dynamic) -> INT {
|
||||||
value.tag() as INT
|
value.tag() as INT
|
||||||
}
|
}
|
||||||
|
/// Set the _tag_ of a `Dynamic` value.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
///
|
||||||
|
/// ```rhai
|
||||||
|
/// let x = "hello, world!";
|
||||||
|
///
|
||||||
|
/// x.tag = 42;
|
||||||
|
///
|
||||||
|
/// print(x.tag); // prints 42
|
||||||
|
/// ```
|
||||||
#[rhai_fn(name = "set_tag", set = "tag", return_raw)]
|
#[rhai_fn(name = "set_tag", set = "tag", return_raw)]
|
||||||
pub fn set_tag(value: &mut Dynamic, tag: INT) -> RhaiResultOf<()> {
|
pub fn set_tag(value: &mut Dynamic, tag: INT) -> RhaiResultOf<()> {
|
||||||
if tag < Tag::MIN as INT {
|
if tag < Tag::MIN as INT {
|
||||||
@ -54,6 +79,28 @@ mod core_functions {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Block the current thread for a particular number of `seconds`.
|
||||||
|
#[cfg(not(feature = "no_float"))]
|
||||||
|
#[rhai_fn(name = "float")]
|
||||||
|
pub fn sleep_float(seconds: FLOAT) {
|
||||||
|
if seconds <= 0.0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "f32_float"))]
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs_f64(seconds));
|
||||||
|
#[cfg(feature = "f32_float")]
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs_f32(seconds));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Block the current thread for a particular number of `seconds`.
|
||||||
|
pub fn sleep(seconds: INT) {
|
||||||
|
if seconds <= 0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::thread::sleep(std::time::Duration::from_secs(seconds as u64));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
|
Loading…
Reference in New Issue
Block a user