1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//! Timer related functionality.
use crate::{c_int, c_void, stdinc::*};
/// Function prototype for the timer callback function.
///
/// The callback function is passed the current timer interval and returns the
/// next timer interval. If the returned value is the same as the one passed in,
/// the periodic alarm continues, otherwise a new alarm is scheduled. If the
/// callback returns 0, the periodic alarm is cancelled.
pub type SDL_TimerCallback =
Option<unsafe extern "C" fn(interval: Uint32, param: *mut c_void) -> Uint32>;
/// Definition of the timer ID type.
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct SDL_TimerID(pub c_int);
extern "C" {
/// Get the number of milliseconds since the SDL library initialization.
///
/// **Note:** This value wraps if the program runs for more than ~49 days.
pub fn SDL_GetTicks() -> Uint32;
/// Get the current value of the high resolution counter.
pub fn SDL_GetPerformanceCounter() -> Uint64;
/// Get the count per second of the high resolution counter.
pub fn SDL_GetPerformanceFrequency() -> Uint64;
/// Wait a specified number of milliseconds before returning.
///
/// This is essentially the same as
/// [`std::thread::sleep_ms`](https://doc.rust-lang.org/std/thread/fn.sleep_ms.html),
/// which incidentally is deprecated for being a slightly inferior interface
/// compared to
/// [`std::thread::sleep`](https://doc.rust-lang.org/std/thread/fn.sleep.html).
pub fn SDL_Delay(ms: Uint32);
/// Add a new timer to the pool of timers already running.
///
/// **Returns:** A timer ID, or 0 when an error occurs.
pub fn SDL_AddTimer(
interval: Uint32, callback: SDL_TimerCallback, param: *mut c_void,
) -> SDL_TimerID;
/// Remove a timer by ID.
///
/// **Returns:** A boolean value indicating success or failure.
///
/// **Warning:** It is not safe to remove a timer multiple times.
pub fn SDL_RemoveTimer(id: SDL_TimerID) -> SDL_bool;
}