Skip to main content

Scheduler

Struct Scheduler 

Source
pub struct Scheduler(/* private fields */);
Expand description

A scheduler for events and queries meant to be processed at specified deadlines.

The Scheduler handle is Clone-able and can be shared or sent to other threads.

When scheduling an event or query, it is important to consider that its deadline must be in the future of the current simulation time and that stepping method such as Simulation::step or Simulation::run eagerly advance the simulation time to the deadline of the next scheduled event or simulation tick. If a stepping method is executed concurrently, therefore, events or queries can only be scheduled after the deadline associated with the next scheduler event or simulation tick.

Implementations§

Source§

impl Scheduler

Source

pub fn time(&self) -> MonotonicTime

Returns the current simulation time.

§Examples
use nexosim::simulation::Scheduler;
use nexosim::time::MonotonicTime;

fn is_third_millennium(scheduler: &Scheduler) -> bool {
    let time = scheduler.time();
    time >= MonotonicTime::new(978307200, 0).unwrap()
        && time < MonotonicTime::new(32535216000, 0).unwrap()
}
Source

pub fn schedule_event<T>( &self, deadline: impl Deadline, event_id: &EventId<T>, arg: T, ) -> Result<(), SchedulingError>
where T: Send + Clone + 'static,

Schedules an event at a future time.

An error is returned if the specified time is not in the future of the current simulation time.

Events scheduled for the same time and targeting the same model are guaranteed to be processed according to the scheduling order.

Source

pub fn schedule_keyed_event<T>( &self, deadline: impl Deadline, event_id: &EventId<T>, arg: T, ) -> Result<EventKey, SchedulingError>
where T: Send + Clone + 'static,

Schedules a cancellable event at a future time and returns an event key.

An error is returned if the specified time is not in the future of the current simulation time.

Events scheduled for the same time and targeting the same model are guaranteed to be processed according to the scheduling order.

Source

pub fn schedule_periodic_event<T>( &self, deadline: impl Deadline, period: Duration, event_id: &EventId<T>, arg: T, ) -> Result<(), SchedulingError>
where T: Send + Clone + 'static,

Schedules a periodically recurring event at a future time.

An error is returned if the specified time is not in the future of the current simulation time, or if the specified period is null.

Events scheduled for the same time and targeting the same model are guaranteed to be processed according to the scheduling order.

Source

pub fn schedule_keyed_periodic_event<T>( &self, deadline: impl Deadline, period: Duration, event_id: &EventId<T>, arg: T, ) -> Result<EventKey, SchedulingError>
where T: Send + Clone + 'static,

Schedules a cancellable, periodically recurring event at a future time and returns an event key.

An error is returned if the specified time is not in the future of the current simulation time, or if the specified period is null.

Events scheduled for the same time and targeting the same model are guaranteed to be processed according to the scheduling order.

Source

pub fn schedule_query<T, R>( &self, deadline: impl Deadline, query_id: &QueryId<T, R>, arg: T, ) -> Result<ReplyReader<R>, SchedulingError>
where T: Send + Clone + 'static, R: Send + 'static,

Schedules a query at a future time.

An error is returned if the specified time is not in the future of the current simulation.

Queries scheduled for the same time and targeting the same model are guaranteed to be processed according to the scheduling order.

Source

pub fn halt(&self)

Requests the simulation to be interrupted at the earliest opportunity.

If a stepping method such as Simulation::step or Simulation::run is concurrently being executed, this will cause such method to return before it steps to next scheduler deadline or simulation tick (if any) with ExecutionError::Halted.

Otherwise, this will cause the next call to a Simulation::step* or Simulation::process* method to return immediately with ExecutionError::Halted.

In all cases, once ExecutionError::Halted is returned, the simulation can be resumed at any moment with another call to a stepping method or a Simulation::process_* methods.

Trait Implementations§

Source§

impl Clone for Scheduler

Source§

fn clone(&self) -> Scheduler

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Scheduler

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more