13 #include <QMetaObject> 16 #include "../threadsconfig.h" 40 if constexpr (
requires {
operator co_await (obj); })
41 return operator co_await (obj);
42 else if constexpr (
requires { obj.operator co_await (); })
43 return obj.operator co_await ();
50 template<
typename Promise,
typename T>
85 QObject::disconnect (conn);
109 template<
typename Promise>
113 auto conn = QObject::connect (&
Context_,
115 [handle] (QObject *
object)
117 auto className =
object->metaObject ()->className ();
118 handle.promise ().DeadObjects_.push_back ({ className,
object->objectName () });
120 handle.promise ().ContextConnections_.push_back (conn);
QVector< QMetaObject::Connection > ContextConnections_
void FinalSuspend() noexcept
void CheckDeadObjects(const QVector< DeadObjectInfo > &deadObjects)
AddContextObject(QObject &context)
bool await_ready() const noexcept
decltype(auto) await_resume()
decltype(auto) await_suspend(auto handle)
requires(Tup1Size==Tup2Size) const expr auto ZipWith(Tup1 &&tup1
void HasContextExtensions
auto await_transform(T &&awaitable)
QVector< detail::DeadObjectInfo > DeadObjects_
auto Tup2 &&tup2 noexcept
bool await_suspend(std::coroutine_handle< Promise > handle)