#[repr(C)]
pub struct QSemaphoreReleaser { /* private fields */ }
Expand description

The QSemaphoreReleaser class provides exception-safe deferral of a QSemaphore::release() call.

C++ class: QSemaphoreReleaser.

C++ documentation:

The QSemaphoreReleaser class provides exception-safe deferral of a QSemaphore::release() call.

QSemaphoreReleaser can be used wherever you would otherwise use QSemaphore::release(). Constructing a QSemaphoreReleaser defers the release() call on the semaphore until the QSemaphoreReleaser is destroyed (see RAII pattern).

You can use this to reliably release a semaphore to avoid dead-lock in the face of exceptions or early returns:

// … do something that may throw or return early sem.release();

If an early return is taken or an exception is thrown before the sem.release() call is reached, the semaphore is not released, possibly preventing the thread waiting in the corresponding sem.acquire() call from ever continuing execution.

When using RAII instead:

const QSemaphoreReleaser releaser(sem); // … do something that may throw or early return // implicitly calls sem.release() here and at every other return in between

this can no longer happen, because the compiler will make sure that the QSemaphoreReleaser destructor is always called, and therefore the semaphore is always released.

QSemaphoreReleaser is move-enabled and can therefore be returned from functions to transfer responsibility for releasing a semaphore out of a function or a scope:

{ // some scope QSemaphoreReleaser releaser; // does nothing // … if (someCondition) { releaser = QSemaphoreReleaser(sem); // … } // … } // conditionally calls sem.release(), depending on someCondition

A QSemaphoreReleaser can be canceled by a call to cancel(). A canceled semaphore releaser will no longer call QSemaphore::release() in its destructor.

Implementations§

source§

impl QSemaphoreReleaser

source

pub unsafe fn cancel(&self) -> Ptr<QSemaphore>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Cancels this QSemaphoreReleaser such that the destructor will no longer call semaphore()->release(). Returns the value of semaphore() before this call. After this call, semaphore() will return nullptr.

Calls C++ function: QSemaphore* QSemaphoreReleaser::cancel().

C++ documentation:

Cancels this QSemaphoreReleaser such that the destructor will no longer call semaphore()->release(). Returns the value of semaphore() before this call. After this call, semaphore() will return nullptr.

To enable again, assign a new QSemaphoreReleaser:

releaser.cancel(); // avoid releasing old semaphore() releaser = QSemaphoreReleaser(sem, 42); // now will call sem.release(42) when ‘releaser’ is destroyed

source

pub unsafe fn new() -> CppBox<QSemaphoreReleaser>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Default constructor. Creates a QSemaphoreReleaser that does nothing.

Calls C++ function: [constructor] void QSemaphoreReleaser::QSemaphoreReleaser().

C++ documentation:

Default constructor. Creates a QSemaphoreReleaser that does nothing.

source

pub unsafe fn from_q_semaphore_int( sem: impl CastInto<Ref<QSemaphore>>, n: c_int ) -> CppBox<QSemaphoreReleaser>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Constructor. Stores the arguments and calls sem.release(n) in the destructor.

Calls C++ function: [constructor] void QSemaphoreReleaser::QSemaphoreReleaser(QSemaphore& sem, int n = …).

C++ documentation:

Constructor. Stores the arguments and calls sem.release(n) in the destructor.

source

pub unsafe fn from_q_semaphore_int2( sem: impl CastInto<Ptr<QSemaphore>>, n: c_int ) -> CppBox<QSemaphoreReleaser>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Constructor. Stores the arguments and calls sem->release(n) in the destructor.

Calls C++ function: [constructor] void QSemaphoreReleaser::QSemaphoreReleaser(QSemaphore* sem, int n = …).

C++ documentation:

Constructor. Stores the arguments and calls sem->release(n) in the destructor.

source

pub unsafe fn from_q_semaphore( sem: impl CastInto<Ref<QSemaphore>> ) -> CppBox<QSemaphoreReleaser>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Constructor. Stores the arguments and calls sem.release(n) in the destructor.

Calls C++ function: [constructor] void QSemaphoreReleaser::QSemaphoreReleaser(QSemaphore& sem).

C++ documentation:

Constructor. Stores the arguments and calls sem.release(n) in the destructor.

source

pub unsafe fn from_q_semaphore2( sem: impl CastInto<Ptr<QSemaphore>> ) -> CppBox<QSemaphoreReleaser>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Constructor. Stores the arguments and calls sem->release(n) in the destructor.

Calls C++ function: [constructor] void QSemaphoreReleaser::QSemaphoreReleaser(QSemaphore* sem).

C++ documentation:

Constructor. Stores the arguments and calls sem->release(n) in the destructor.

source

pub unsafe fn semaphore(&self) -> Ptr<QSemaphore>

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Returns a pointer to the QSemaphore object provided to the constructor, or by the last move assignment, if any. Otherwise, returns nullptr.

Calls C++ function: QSemaphore* QSemaphoreReleaser::semaphore() const.

C++ documentation:

Returns a pointer to the QSemaphore object provided to the constructor, or by the last move assignment, if any. Otherwise, returns nullptr.

source

pub unsafe fn swap(&self, other: impl CastInto<Ref<QSemaphoreReleaser>>)

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.

Exchanges the responsibilites of *this and other.

Calls C++ function: void QSemaphoreReleaser::swap(QSemaphoreReleaser& other).

C++ documentation:

Exchanges the responsibilites of *this and other.

Unlike move assignment, neither of the two objects ever releases its semaphore, if any, as a consequence of swapping.

Therefore this function is very fast and never fails.

Trait Implementations§

source§

impl CppDeletable for QSemaphoreReleaser

Available on cpp_lib_version="5.11.3" or cpp_lib_version="5.12.2" or cpp_lib_version="5.13.0" or cpp_lib_version="5.14.0" only.
source§

unsafe fn delete(&self)

Unless canceled, calls QSemaphore::release() with the arguments provided to the constructor, or by the last move assignment.

Calls C++ function: [destructor] void QSemaphoreReleaser::~QSemaphoreReleaser().

C++ documentation:

Unless canceled, calls QSemaphore::release() with the arguments provided to the constructor, or by the last move assignment.

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, U> CastInto<U> for T
where U: CastFrom<T>,

source§

unsafe fn cast_into(self) -> U

Performs the conversion. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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> StaticUpcast<T> for T

source§

unsafe fn static_upcast(ptr: Ptr<T>) -> Ptr<T>

Convert type of a const pointer. Read more
source§

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

§

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

§

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.