template<typename INTERFACE>
class maxon::ThreadRefTemplate< INTERFACE >
Reference to a thread (ThreadInterface).
- Template Parameters
-
INTERFACE | Interface class for the ThreadRef (inherits from ThreadInterface). |
|
| MAXON_DEFAULT_REFERENCE_CONSTRUCTORS (ThreadRefTemplate, Ptr) |
|
MAXON_IMPLICIT | ThreadRefTemplate (const Ptr &src) |
|
MAXON_IMPLICIT | ThreadRefTemplate (Ptr &&src) |
|
Bool | IsRunning () const |
|
Bool | Wait (TimeValue timeout=TIMEVALUE_INFINITE, WAITMODE mode=WAITMODE::DEFAULT) const |
|
Result< void > | GetResult (TimeValue timeout=TIMEVALUE_INFINITE, WAITMODE mode=WAITMODE::DEFAULT) const |
|
void | Cancel () |
|
Bool | IsCancelled () const |
|
void | CancelAndWait (WAITMODE mode=WAITMODE::DEFAULT) |
|
Result< void > | Start (THREADPRIORITY priority=THREADPRIORITY::NORMAL) |
|
ObservableFinishedBase< INTERFACE > | ObservableFinished () |
|
String | ToString (const FormatStatement *formatStatement=nullptr) const |
|
Bool | operator== (const ThreadRefTemplate &other) const |
|
Bool | operator!= (const ThreadRefTemplate &other) const |
|
T * | GetPointer () |
|
ConstReferencedType * | GetPointer () const |
|
T * | operator-> () |
|
ConstReferencedType * | operator-> () const |
|
std::conditional< std::is_void< T >::value, DeleteReturnType01, T >::type & | operator* () |
|
std::conditional< std::is_void< ConstReferencedType >::value, DeleteReturnType01, T >::type & | operator* () const |
|
| operator T* () |
|
| operator ConstReferencedType * () const |
|
| operator Bool () const |
|
| operator Bool () |
|
const std::conditional< std::is_void< T >::value, DeleteReturnType01, T >::type & | operator[] (Int) const =delete |
|
ResultRef< typename std::remove_const< T >::type > | MakeWritable (Bool resetOnError=true) |
|
std::conditional< std::is_void< T >::value, DeleteReturnType01, T >::type & | GetOrNull () const |
|
| BaseRef () |
|
MAXON_IMPLICIT | BaseRef (std::nullptr_t)=delete |
|
MAXON_IMPLICIT | BaseRef (T *o) |
|
template<typename PTR > |
| BaseRef (ForwardResultPtr< PTR > o) |
|
| BaseRef (ResultPtr< T > o, Int) |
|
| BaseRef (const BaseRef &src) |
|
template<typename REF , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, BaseRef, REF) && maxon::HasErasedBase<typename REF::ReferencedType, ReferencedType>::value>::type> |
MAXON_IMPLICIT | BaseRef (const REF &src) |
|
template<typename REF , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, BaseRef, REF) && maxon::HasErasedBase<typename REF::ReferencedType, ReferencedType>::value>::type> |
MAXON_IMPLICIT | BaseRef (REF &src) |
|
BaseRef & | operator= (T *src) |
|
BaseRef & | operator= (std::nullptr_t src) |
|
BaseRef & | operator= (const BaseRef &src) |
|
template<typename REF , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, BaseRef, REF) && maxon::HasErasedBase<typename REF::ReferencedType, ReferencedType>::value>::type> |
BaseRef & | operator= (const REF &src) |
|
template<typename REF , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, BaseRef, REF) && maxon::HasErasedBase<typename REF::ReferencedType, ReferencedType>::value>::type> |
BaseRef & | operator= (REF &src) |
|
| BaseRef (BaseRef &&src) |
|
template<typename REF , typename = typename std::enable_if<!STD_IS_REPLACEMENT(const, REF) && !STD_IS_REPLACEMENT(base_of, BaseRef, REF) && maxon::HasErasedBase<typename REF::ReferencedType, ReferencedType>::value>::type> |
MAXON_IMPLICIT | BaseRef (REF &&src) |
|
BaseRef & | operator= (BaseRef &&src) |
|
template<typename REF , typename = typename std::enable_if<!STD_IS_REPLACEMENT(const, REF) && !STD_IS_REPLACEMENT(base_of, BaseRef, REF) && maxon::HasErasedBase<typename REF::ReferencedType, ReferencedType>::value>::type> |
BaseRef & | operator= (REF &&src) |
|
| ~BaseRef () |
|
Bool | operator== (const BaseRef &b) const |
|
Bool | operator!= (const BaseRef &b) const |
|
Bool | operator< (const BaseRef &b) const |
|
| MAXON_OPERATOR_INEQUALITY (BaseRef) |
|
Bool | operator== (const T *b) const |
|
Bool | operator!= (const T *b) const |
|
Bool | operator== (typename std::remove_const< T >::type *b) const |
|
Bool | operator!= (typename std::remove_const< T >::type *b) const |
|
Bool | operator== (std::nullptr_t) const |
|
Bool | operator!= (std::nullptr_t) const |
|
HashInt | GetHashCode () const |
|
UniqueHash | GetUniqueHashCode () const |
|
T * | Disconnect () |
|
void | PrivateSetTarget (ResultPtr< T > src) |
|
void | PrivateSetPointer (T *ptr) |
|
|
template<THREADCANCELLATION B = THREADCANCELLATION::AUTOMATIC, typename FN , typename... ARGS> |
static auto | Create (FN &&src, ARGS &&... args) -> ResultMemT< ThreadResultRef< decltype(src(std::forward< ARGS >(args)...))>> |
|
static StrongRef< const INTERFACE > | GetCurrentThread () |
|
static Int | GetCurrentThreadCount () |
|
static Bool | IsMainThread () |
|
static THREADTYPE | GetCurrentThreadType () |
|
static THREADTYPE | GetCurrentThreadType (Int &threadIdentifier) |
|
static Result< void > | AssimilateAlienThread () |
|
static Bool | IsCurrentThreadCancelled (const ThreadInterface *optionalThread=nullptr) |
|
static Bool | IsCurrentThreadCancelled (const ThreadRefTemplate< INTERFACE > &optionalThread) |
|
template<THREADCANCELLATION B = THREADCANCELLATION::AUTOMATIC, typename FN > |
static MAXON_WARN_UNUSED auto | Run (FN &&src, THREADPRIORITY priority=THREADPRIORITY::NORMAL) -> ResultMemT< ThreadResultRef< decltype(src())>> |
|
template<THREADCANCELLATION B = THREADCANCELLATION::AUTOMATIC, typename FN , typename... ARGS> |
static auto | Run (FN &&src, THREADPRIORITY priority, ARGS &&... args) -> ResultMemT< ThreadResultRef< decltype(src(std::forward< ARGS >(args)...))>> |
|
static MAXON_ATTRIBUTE_FORCE_INLINE const ThreadRefTemplate & | NullValue () |
|
static void | PrivateLookupFn () |
|
static std::false_type | GenericVarianceCheck (const void *) |
|
template<typename... ARGS> |
static MAXON_ATTRIBUTE_FORCE_INLINE ResultMemT< BaseRef > | Create (ARGS &&... args) |
|
static const BaseRef & | NullValueRef () |
|
static std::conditional< Bool(HANDLER::KIND &VALUEKIND::UNIQUE_REFERENCE), BaseRef, const BaseRef & >::type | NullValue () |
|
Waits until the referenced thread has been executed. As long as a thread hasn't been started it is considered not to have finished yet. Once it has run this will return immediately until you restart the thread.
Wait() might execute other jobs in the current queue until the one you are waiting for has finished or is timed out. Therefore you may never lock a shared resource another job might use as well and then wait. For one this could dead-lock and conceptually this would result in single-threaded performance.
If you call Wait() from within an enqueued job you must have started what you are waiting for. Otherwise Wait() will immediately return false because this would lead to a deadlock. The same applies if a thread tries to wait for itself.
Instead of waiting for a thread to start some action after it has finished you can subscribe to ObservableFinished(). This cannot dead-lock, is more efficient and can even be used to run the observer in a different queue. For example you can run a thread and register an observer for it that will run on the main thread's queue and updates the UI. THREADSAFE.
- Parameters
-
[in] | timeout | Maximum wait interval (or TIMEVALUE_INFINITE for no time-out). |
[in] | mode | WAITMODE::DEFAULT by default. WAITMODE::RETURN_ON_CANCEL means that Wait() will return if the caller has been cancelled even if the condition has not been set yet. |
- Returns
- True if successful, false if you try to wait inside an enqueued job or there is no job at all.