-
首页
-
C4D R23.110 C++ SDK
JobRef Class Reference
线程
#include <job.h>
详细描述
Reference to a job (
JobInterface
).
公共成员函数
|
|
MAXON_DEFAULT_REFERENCE_CONSTRUCTORS
(
JobRef
,
Ptr
)
|
MAXON_IMPLICIT
|
JobRef
(const
Ptr
&
src
)
|
MAXON_IMPLICIT
|
JobRef
(
Ptr
&&
src
)
|
Bool
|
Wait
(
TimeValue
timeout=
TIMEVALUE_INFINITE
,
WAITMODE
mode=
WAITMODE::DEFAULT
) const
|
Result
< void >
|
GetResult
(
TimeValue
timeout=
TIMEVALUE_INFINITE
,
WAITMODE
mode=
WAITMODE::DEFAULT
) const
|
void
|
取消
()
|
Bool
|
IsCancelled
() const
|
void
|
CancelAndWait
(
WAITMODE
mode=
WAITMODE::DEFAULT
)
|
JobRef
&
|
Enqueue
(
JobQueueInterface
*queue=
JOBQUEUE_CURRENT
)
|
Result
< void >
|
AddSubJob
(
JobInterface
*subJob)
|
template<JOBCANCELLATION B = JOBCANCELLATION::ISOK, typename FN >
|
|
DISABLE_IF_JOBREF
(FN,
Result
< void >)
AddSubJob
(FN &&
src
)
|
template<typename GROUP >
|
Result
< void >
|
AddSubGroup
(GROUP *subGroup)
|
JobGroupInterface
*
|
GetJobGroup
() const
|
ObservableFinishedBase<
JobInterface
>
|
ObservableFinished
()
|
ObservableCancelledBase<
JobInterface
>
|
ObservableCancelled
()
|
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)
|
静态公共成员函数
|
template<JOBCANCELLATION B = JOBCANCELLATION::AUTOMATIC, typename FN , typename... ARGS>
|
static auto
|
创建
(FN &&
src
, ARGS &&... args) ->
ResultMemT
<
JobResultRef
< decltype(
src
(std::forward< ARGS >(args)...))>>
|
template<JOBCANCELLATION B = JOBCANCELLATION::AUTOMATIC, typename FN >
|
static
MAXON_WARN_UNUSED
auto
|
Enqueue
(FN &&
src
,
JobQueueInterface
*queue=
JOBQUEUE_CURRENT
) ->
ResultMemT
<
JobResultRef
< decltype(
src
())>>
|
template<JOBCANCELLATION B = JOBCANCELLATION::AUTOMATIC, typename FN , typename... ARGS>
|
static
MAXON_WARN_UNUSED
auto
|
Enqueue
(FN &&
src
,
JobQueueInterface
*queue, ARGS &&... args) ->
ResultMemT
<
JobResultRef
< decltype(
src
(std::forward< ARGS >(args)...))>>
|
static
Int
|
GetCurrentWorkerThreadIndex
()
|
static
Int
|
GetCurrentThreadCount
()
|
static
Bool
|
IsCurrentJobCancelled
(const
JobInterface
*optionalJob=nullptr)
|
static
Bool
|
IsCurrentJobCancelled
(const
JobRef
&optionalJob)
|
static
JobStatusInterface
*
|
GetCurrentJob
()
|
static const
JobRef
&
|
NullValue
()
|
static std::false_type
|
GenericVarianceCheck
(const void *)
|
template<typename... ARGS>
|
static
MAXON_ATTRIBUTE_FORCE_INLINE
ResultMemT
<
BaseRef
>
|
创建
(ARGS &&... args)
|
static const
BaseRef
&
|
NullValueRef
()
|
static std::conditional<
Bool
(HANDLER::KIND &
VALUEKIND::UNIQUE_REFERENCE
),
BaseRef
, const
BaseRef
& >::type
|
NullValue
()
|
Static Private Member Functions
|
template<JOBCANCELLATION B, typename FN , typename... ARGS>
|
static
ResultPtr
<
JobInterface
>
|
CreateJob
(FN &&
src
, ARGS &&... args)
|
Member Typedef Documentation
◆
Ptr
构造函数 & 析构函数文档编制
◆
JobRef()
[1/2]
◆
JobRef()
[2/2]
成员函数文档编制
◆
MAXON_DEFAULT_REFERENCE_CONSTRUCTORS()
MAXON_DEFAULT_REFERENCE_CONSTRUCTORS
|
(
|
JobRef
|
,
|
|
|
Ptr
|
|
|
)
|
|
|
◆
Create()
static auto Create
|
(
|
FN &&
|
src
,
|
|
|
ARGS &&...
|
args
|
|
)
|
|
->
ResultMemT
<
JobResultRef
<decltype(
src
(std::forward<ARGS>(args)...))>>
static
|
|
Creates a reference to a job with n arguments.
-
参数
-
[in]
|
src
|
Lambda or object with operator ().
|
[in]
|
args
|
Arguments for the function.
|
-
Template Parameters
-
B
|
Behaviour for early job cancellation.
|
FN
|
Type of function/lambda, deduced by the compiler.
|
ARGS
|
Parameter types.
|
-
返回
-
OK on success.
◆
Wait()
Waits until the referenced job has been executed. As long as a job hasn't been started it is considered not to have finished yet. Once it has run this will return immediately.
Wait()
might execute other jobs in the current queue until the one you are waiting for has finished or is timed out. Therefore you must 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 enqueued what you are waiting for
. Otherwise
Wait()
will immediately return false because this would lead to a deadlock. The same applies if a job tries to wait for itself.
Instead of waiting for a job 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 this job has been executed and returns the result. 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.
◆
Cancel()
Asks the job to cancel execution. If the job is a part of a group the whole group will be cancelled. Cancellation of a job does not affect its finish observers. The call will not wait for the job to cancel. THREADSAFE.
◆
IsCancelled()
Bool
IsCancelled
|
(
|
|
)
|
const
|
Checks if the job should stop. Will return true for a null reference. THREADSAFE.
-
返回
-
True if the job has been asked to cancel.
◆
CancelAndWait()
Asks the job to cancel execution and waits until it has finished. If the job is a part of a group the whole group will be cancelled. Cancellation of a job does not affect its finish observers. THREADSAFE.
-
参数
-
◆
Enqueue()
[1/3]
Enqueues the job the ref points to. THREADSAFE.
-
参数
-
[in]
|
queue
|
The queue the object should run on (JOBQUEUE_CURRENT for current queue).
|
-
返回
-
Always reference to itself (for concatenation).
◆
Enqueue()
[2/3]
Enqueues a lambda or object with operator (). THREADSAFE.
-
参数
-
[in]
|
src
|
Lambda or object with operator ().
|
[in]
|
queue
|
The queue the object should run on (JOBQUEUE_CURRENT for current queue).
|
-
Template Parameters
-
B
|
Behaviour for early job cancellation.
|
FN
|
Type of function/lambda, deduced by the compiler.
|
-
返回
-
JobRef
with
GetResult()
template for the type returned by the lambda.
◆
Enqueue()
[3/3]
Enqueues a lambda or object with operator () and n arguments. THREADSAFE.
-
参数
-
[in]
|
src
|
Lambda or object with operator ().
|
[in]
|
queue
|
The queue the object should run on (JOBQUEUE_CURRENT for current queue).
|
[in]
|
args
|
Argument(s) for the function.
|
-
Template Parameters
-
B
|
Behaviour for early job cancellation.
|
FN
|
Type of function/lambda, deduced by the compiler.
|
ARGS
|
Parameter types.
|
-
返回
-
JobRef
with
GetResult()
template for the type returned by the lambda.
◆
AddSubJob()
Adds a job to this job's group (see JobGroup). The caller must belong to a group. THREADSAFE.
-
参数
-
[in]
|
subJob
|
Job (nullptr will return error).
|
-
返回
-
OK on success.
◆
DISABLE_IF_JOBREF()
DISABLE_IF_JOBREF
|
(
|
FN
|
,
|
|
|
Result
< void >
|
|
|
)
|
|
&&
|
Adds a job to this job's group (see JobGroup). The caller must belong to a group. THREADSAFE.
-
参数
-
[in]
|
src
|
Lambda or object with operator ().
|
-
Template Parameters
-
B
|
Behaviour for early job cancellation.
|
FN
|
Type of function/lambda, deduced by the compiler.
|
-
返回
-
OK on success.
◆
AddSubGroup()
Result
<void> AddSubGroup
|
(
|
GROUP *
|
subGroup
|
)
|
|
Adds a subgroup to this job's group. The caller must belong to a group. THREADSAFE.
-
参数
-
[in]
|
subGroup
|
Job group (nullptr will return error).
|
-
返回
-
OK on success.
◆
GetJobGroup()
Returns the group a job belongs to. THREADSAFE.
-
返回
-
JobGroup this job belongs to or nullptr if it's not part of a group.
◆
ObservableFinished()
ObservableFinishedBase<
JobInterface
> ObservableFinished
|
(
|
|
)
|
|
ObservableFinished is an observable that is triggered after this job has been executed. THREADSAFE.
-
返回
-
Custom observable.
◆
ObservableCancelled()
ObservableCancelledBase<
JobInterface
> ObservableCancelled
|
(
|
|
)
|
|
ObservableCancelled is an observable that is triggered when this job is cancelled. THREADSAFE.
-
返回
-
Custom observable.
◆
GetCurrentWorkerThreadIndex()
static
Int
GetCurrentWorkerThreadIndex
|
(
|
|
)
|
|
|
static
|
Returns the index of the internal worker thread which is running this job. If the job is not running as part of a worker thread 0 is returned to make sure you can safely use this as index to an array with thread local data. THREADSAFE.
-
返回
-
Index between 0 and the number of threads used for the queue - 1.
◆
GetCurrentThreadCount()
static
Int
GetCurrentThreadCount
|
(
|
|
)
|
|
|
static
|
Returns the number of worker threads for the current job context. This might be different from the actual CPU core or thread count. THREADSAFE.
-
返回
-
Number of worker threads, guaranteed to be > 0.
◆
IsCurrentJobCancelled()
[1/2]
static
Bool
IsCurrentJobCancelled
|
(
|
const
JobInterface
*
|
optionalJob
=
nullptr
|
)
|
|
|
static
|
Checks if the currently running job (or thread) should stop. Works for jobs and threads. THREADSAFE.
-
参数
-
[in]
|
optionalJob
|
Optional job which should also be checked for cancellation.
|
-
返回
-
True if the job has been asked to cancel.
◆
IsCurrentJobCancelled()
[2/2]
static
Bool
IsCurrentJobCancelled
|
(
|
const
JobRef
&
|
optionalJob
|
)
|
|
|
static
|
Checks if the currently running job (or thread) should stop. Works for jobs and threads. THREADSAFE.
-
参数
-
[in]
|
optionalJob
|
Optional job which should also be checked for cancellation.
|
-
返回
-
True if the job has been asked to cancel.
◆
GetCurrentJob()
Private. THREADSAFE.
-
返回
-
Currently running internal job.
◆
NullValue()
static const
JobRef
& NullValue
|
(
|
|
)
|
|
|
static
|
Returns a null value of the
JobRef
(见
nullvalue.h
for more details).
-
返回
-
A null value of the
JobRef
.
◆
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.
◆
operator->()
◆
CreateJob()