12 #ifndef __UT_HOUDINIEXECUTIONCONTEXT_H__
13 #define __UT_HOUDINIEXECUTIONCONTEXT_H__
33 virtual ~
Event() =
default;
46 void invoke()
override { myFunc(); }
68 return theInstance !=
nullptr;
97 theInstance =
nullptr;
121 hboost::asio::post(myIOContext, [
event = std::move(ev)]()
139 void run(exception_handler_t exception_handler =
nullptr);
142 myIOContext.restart();
166 myLoop.postEvent(std::move(ev));
187 UI_QtExecutionContext&
query(hboost::asio::execution::detail::context_t)
const
192 static constexpr hboost::asio::execution::blocking_t
query(
193 hboost::asio::execution::blocking_t)
195 return hboost::asio::execution::blocking.never;
198 static constexpr hboost::asio::exection::relationship_t
query(
199 hboost::asio::execution::relationship_t)
201 return hboost::asio::execution::relationship.fork;
204 static constexpr hboost::asio::execution::outstanding_work_t
query(
205 hboost::asio::execution::outstanding_work_t)
207 return hboost::asio::execution::outstanding_work.tracked;
210 template <
typename OtherAllocator>
211 static constexpr
auto query(
212 hboost::asio::execution::allocator_t<OtherAllocator>)
214 return std::allocator<void>();
217 static constexpr
auto query(hboost::asio::execution::allocator_t<void>)
219 return std::allocator<void>();
222 template <
typename F>
225 myCtx->execute(std::move(f));
232 template <
typename F,
typename OtherAllocator>
237 template <
typename F,
typename OtherAllocator>
238 void post(F f,
const OtherAllocator&
a)
const
242 template <
typename F,
typename OtherAllocator>
243 void defer(F f,
const OtherAllocator&
a)
const
247 template <
typename F>
250 myCtx->
post(std::move(f));
256 return myCtx == rhs.myCtx;
267 #endif // __UT_HOUDINIEXECUTIONCONTEXT_H__
static void clearInstance()
void defer(F f, const OtherAllocator &a) const
UT_HoudiniEventLoopExecutionContext()
GLsizei const GLfloat * value
GLboolean GLboolean GLboolean GLboolean a
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
bool(*)(std::exception_ptr) exception_handler_t
UT_HoudiniExecutionContext()
void post_(UT_UniquePtr< Event > ev) override
SYS_NO_DISCARD_RESULT SYS_FORCE_INLINE constexpr T * SYSaddressof(T &val) noexcept
bool operator==(const UT_HoudiniExecutor &rhs) const
bool operator!=(const UT_HoudiniExecutor &rhs) const
UT_HoudiniWorkEventLoop()
void postEvent(UT_UniquePtr< event_t > ev)
#define UT_NON_COPYABLE(CLASS)
Define deleted copy constructor and assignment operator inside a class.
static bool hasInstance()
UT_UniquePtr< T > UTmakeUnique(REST &&...args)
hboost::asio::io_context ASIO_IOContext
UT_HoudiniWorkEventLoop & loop()
virtual void onWorkStarted()
void post(F f, const OtherAllocator &a) const
LeafData & operator=(const LeafData &)=delete
static UT_HoudiniExecutionContext * instance()
void dispatch(F f, const OtherAllocator &a) const
void on_work_finished() const
UT_HoudiniExecutionContext & context() const
virtual void onWorkFinished()
void on_work_started() const
UT_HoudiniExecutor(UT_HoudiniExecutionContext &context)
int invoke(const Func &taskFunc1, Rest...taskFuncN)