[][src]Struct ofx_sys::OfxMultiThreadSuiteV1

#[repr(C)]
pub struct OfxMultiThreadSuiteV1 { pub multiThread: Option<unsafe extern "C" fn(func: OfxThreadFunctionV1, nThreads: c_uint, customArg: *mut c_void) -> OfxStatus>, pub multiThreadNumCPUs: Option<unsafe extern "C" fn(nCPUs: *mut c_uint) -> OfxStatus>, pub multiThreadIndex: Option<unsafe extern "C" fn(threadIndex: *mut c_uint) -> OfxStatus>, pub multiThreadIsSpawnedThread: Option<unsafe extern "C" fn() -> c_int>, pub mutexCreate: Option<unsafe extern "C" fn(mutex: *mut OfxMutexHandle, lockCount: c_int) -> OfxStatus>, pub mutexDestroy: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>, pub mutexLock: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>, pub mutexUnLock: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>, pub mutexTryLock: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>, }

@brief OFX suite that provides simple SMP style multi-processing

Fields

multiThread: Option<unsafe extern "C" fn(func: OfxThreadFunctionV1, nThreads: c_uint, customArg: *mut c_void) -> OfxStatus>

@brief Function to spawn SMP threads

\arg func The function to call in each thread. \arg nThreads The number of threads to launch \arg customArg The paramter to pass to customArg of func in each thread.

This function will spawn nThreads separate threads of computation (typically one per CPU) to allow something to perform symmetric multi processing. Each thread will call 'func' passing in the index of the thread and the number of threads actually launched.

multiThread will not return until all the spawned threads have returned. It is up to the host how it waits for all the threads to return (busy wait, blocking, whatever).

\e nThreads can be more than the value returned by multiThreadNumCPUs, however the threads will be limitted to the number of CPUs returned by multiThreadNumCPUs.

This function cannot be called recursively.

@returns

  • ::kOfxStatOK, the function func has executed and returned sucessfully
  • ::kOfxStatFailed, the threading function failed to launch
  • ::kOfxStatErrExists, failed in an attempt to call multiThread recursively,
multiThreadNumCPUs: Option<unsafe extern "C" fn(nCPUs: *mut c_uint) -> OfxStatus>

@brief Function which indicates the number of CPUs available for SMP processing

\arg nCPUs pointer to an integer where the result is returned

This value may be less than the actual number of CPUs on a machine, as the host may reserve other CPUs for itself.

@returns

  • ::kOfxStatOK, all was OK and the maximum number of threads is in nThreads.
  • ::kOfxStatFailed, the function failed to get the number of CPUs
multiThreadIndex: Option<unsafe extern "C" fn(threadIndex: *mut c_uint) -> OfxStatus>

@brief Function which indicates the index of the current thread

\arg threadIndex pointer to an integer where the result is returned

This function returns the thread index, which is the same as the \e threadIndex argument passed to the ::OfxThreadFunctionV1.

If there are no threads currently spawned, then this function will set threadIndex to 0

@returns

  • ::kOfxStatOK, all was OK and the maximum number of threads is in nThreads.
  • ::kOfxStatFailed, the function failed to return an index
multiThreadIsSpawnedThread: Option<unsafe extern "C" fn() -> c_int>

@brief Function to enquire if the calling thread was spawned by multiThread

@returns

  • 0 if the thread is not one spawned by multiThread
  • 1 if the thread was spawned by multiThread
mutexCreate: Option<unsafe extern "C" fn(mutex: *mut OfxMutexHandle, lockCount: c_int) -> OfxStatus>

@brief Create a mutex

\arg mutex - where the new handle is returned \arg count - initial lock count on the mutex. This can be negative.

Creates a new mutex with lockCount locks on the mutex intially set.

@returns

  • kOfxStatOK - mutex is now valid and ready to go
mutexDestroy: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>

@brief Destroy a mutex

Destroys a mutex intially created by mutexCreate.

@returns

  • kOfxStatOK - if it destroyed the mutex
  • kOfxStatErrBadHandle - if the handle was bad
mutexLock: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>

@brief Blocking lock on the mutex

This trys to lock a mutex and blocks the thread it is in until the lock suceeds.

A sucessful lock causes the mutex's lock count to be increased by one and to block any other calls to lock the mutex until it is unlocked.

@returns

  • kOfxStatOK - if it got the lock
  • kOfxStatErrBadHandle - if the handle was bad
mutexUnLock: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>

@brief Unlock the mutex

This unlocks a mutex. Unlocking a mutex decreases its lock count by one.

@returns

  • kOfxStatOK if it released the lock
  • kOfxStatErrBadHandle if the handle was bad
mutexTryLock: Option<unsafe extern "C" fn(mutex: OfxMutexHandle) -> OfxStatus>

@brief Non blocking attempt to lock the mutex

This attempts to lock a mutex, if it cannot, it returns and says so, rather than blocking.

A sucessful lock causes the mutex's lock count to be increased by one, if the lock did not suceed, the call returns immediately and the lock count remains unchanged.

@returns

  • kOfxStatOK - if it got the lock
  • kOfxStatFailed - if it did not get the lock
  • kOfxStatErrBadHandle - if the handle was bad

Trait Implementations

impl Clone for OfxMultiThreadSuiteV1[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Copy for OfxMultiThreadSuiteV1[src]

impl Debug for OfxMultiThreadSuiteV1[src]

Auto Trait Implementations

Blanket Implementations

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

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> From for T[src]

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

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

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

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

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

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

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