-
首页
-
C4D R23.110 C++ SDK
JobGroupRef Class Reference
线程
#include <jobgroup.h>
详细描述
Reference to a group (
JobGroupInterface
).
公共成员函数
|
|
MAXON_DEFAULT_REFERENCE_CONSTRUCTORS
(
JobGroupRef
,
Ptr
)
|
JobGroupRef
&
|
Enqueue
(
JobQueueInterface
*queue=
JOBQUEUE_CURRENT
)
|
Result
< void >
|
EnqueueAndWait
(
JobQueueInterface
*queue=
JOBQUEUE_CURRENT
)
|
Bool
|
Wait
(
TimeValue
timeout=
TIMEVALUE_INFINITE
,
WAITMODE
mode=
WAITMODE::DEFAULT
) const
|
Result
< void >
|
GetResult
(
TimeValue
timeout=
TIMEVALUE_INFINITE
,
WAITMODE
mode=
WAITMODE::DEFAULT
) const
|
template<typename T >
|
Result
< void >
|
添加
(T &&obj)
|
template<JOBCANCELLATION B, typename T >
|
Result
< void >
|
添加
(T &&obj)
|
ObservableFinishedBase<
JobGroupInterface
>
|
ObservableFinished
()
|
void
|
取消
()
|
void
|
CancelAndWait
(
WAITMODE
mode=
WAITMODE::DEFAULT
)
|
String
|
ToString
(const
FormatStatement
*formatStatement=nullptr) const
|
T *
|
GetPointer
()
|
ConstReferencedType
*
|
GetPointer
() const
|
T *
|
operator->
()
|
ConstReferencedType
*
|
operator->
() const
|
T &
|
operator*
()
|
ConstReferencedType
&
|
operator*
() const
|
|
operator T*
()
|
|
operator ConstReferencedType *
() const
|
|
operator Bool
() const
|
|
operator Bool
()
|
const T &
|
operator[]
(
Int
) const =delete
|
ResultRef
< typename std::remove_const< T >::type >
|
MakeWritable
(
Bool
resetOnError=true)
|
T &
|
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 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
|
T *
|
Disconnect
()
|
void
|
PrivateSetTarget
(
ResultPtr
< T >
src
)
|
void
|
PrivateSetPointer
(T *ptr)
|
Member Typedef Documentation
◆
Ptr
成员函数文档编制
◆
MAXON_DEFAULT_REFERENCE_CONSTRUCTORS()
◆
Create()
Creates a JobGroup.
-
参数
-
[in]
|
flags
|
Can be used to create an auto-enqueue group.
|
-
返回
-
JobGroupRef
on success, OutOfMemoryerror on failure.
◆
Enqueue()
Enqueues all jobs of the group including subgroups (will add a reference and remove it when the object is no longer needed). Please note that a group (like a job) can only be enqueued once. THREADSAFE.
-
参数
-
[in]
|
queue
|
The queue, use JOBQUEUE_CURRENT for the current queue.
|
-
返回
-
Always reference to itself (for concatenation).
◆
EnqueueAndWait()
Enqueues all jobs of the group including subgroups and waits for them. This implicitely indicates to the system that the current job cannot continue until the group has finished. THREADSAFE.
-
参数
-
[in]
|
queue
|
The queue, use JOBQUEUE_CURRENT for the current queue.
|
-
返回
-
OK on success.
◆
Wait()
Waits until all jobs of the group have been executed.
Wait()
might execute other jobs in the current queue until the group 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 try to call
Wait()
from a job which did not enqueue the group it will immediately return false because this would lead to a deadlock.
Instead of waiting for some group 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 job and register an observer for it that will run on the main thread's queue and updates the UI. THREADSAFE.
-
参数
-
[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.
|
-
返回
-
True if successful, false if you try to wait inside an enqueued job.
◆
GetResult()
Waits until the group has been executed and returns OK on success or any errors returned by its jobs. If there are errors this might return an
AggregatedError
. THREADSAFE.
-
参数
-
[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.
|
-
返回
-
OK on success.
◆
Add()
[1/2]
Result
<void> Add
|
(
|
T &&
|
obj
|
)
|
|
Adds a job, a lambda, a
BaseArray
of jobs or a whole subgroup. The group takes
exclusive
ownership of whatever is added.
If you add a job it will be deleted after it has been executed, when the group will be deleted or when adding the job fails. The job must have been created using the
DefaultAllocator
, e.g. with
Create()
or
NewObj()
. If you had created a job on the stack or used a custom allocator this would lead to a crash.
If you add a
BaseArray
with multiple jobs of the same type to the group (this is faster than single
Add()
s) the jobs and the memory for the array will be freed after they have been executed. If adding the jobs failed they and the memory will be deleted automatically. The array must use the
DefaultAllocator
for memory allocations. Do not use a custom allocator because this would lead to a crash.
If you add a subgroup this will add a reference to the group and remove it when the group is not accessed anymore. If adding a subgroup fails its reference will be removed and its jobs will be stopped.
As long as the group is not enqueued you can add jobs from any thread. As soon as it is enqueued only jobs belonging to the group are allowed to add further jobs. THREADSAFE.
-
参数
-
[in]
|
obj
|
A job, lambda,
BaseArray
of jobs or a subgroup.
|
-
返回
-
OK on success.
◆
Add()
[2/2]
Result
<void> Add
|
(
|
T &&
|
obj
|
)
|
|
The same as above but with the ability to specify the behaviour on early cancellation.
◆
ObservableFinished()
ObservableFinished is an observable that is triggered after this group has been executed. THREADSAFE.
-
返回
-
Custom observable.
◆
Cancel()
Asks the group to cancel execution of all jobs that are enqueued. Currently running jobs are not affected unless they call IsCancelled(). If this is a subgroup the parent group will be cancelled too. The call will not wait for the group to cancel and it can be called from any thread or job. THREADSAFE.
◆
CancelAndWait()
Asks the group to cancel execution and waits until it has finished. THREADSAFE.
-
参数
-
◆
NullValue()
Returns a null value of the
JobGroupRef
(见
nullvalue.h
for more details).
-
返回
-
A null value of the
JobGroupRef
.
◆
ToString()
Returns a readable string of the content.
-
参数
-
[in]
|
formatStatement
|
Nullptr or additional formatting instruction. Currently no additional formatting instructions are supported.
|
-
返回
-
The converted result.