5#ifndef TASKING_BARRIER_H
6#define TASKING_BARRIER_H
33 int limit()
const {
return m_limit; }
47 std::optional<DoneResult> m_result = {};
54template <
int Limit = 1>
58 static_assert(Limit > 0,
"SharedBarrier's limit should be 1 or more.");
60 m_barrier->setLimit(Limit);
69template <
int Limit = 1>
80 return BarrierTask([sharedBarrier](
Barrier &barrier) {
81 SharedBarrier<Limit> *activeBarrier = sharedBarrier.activeStorage();
83 qWarning(
"The barrier referenced from WaitForBarrier element "
84 "is not reachable in the running tree. "
85 "It is possible that no barrier was added to the tree, "
86 "or the barrier is not reachable from where it is referenced. "
87 "The WaitForBarrier task finishes with an error. ");
90 Barrier *activeSharedBarrier = activeBarrier->barrier();
91 const std::optional<DoneResult> result = activeSharedBarrier->result();
92 if (result.has_value()) {
96 QObject::connect(activeSharedBarrier, &Barrier::done, &barrier, &Barrier::stopWithResult);
101template <
typename Signal>
104 return BarrierTask([sender, signal](
Barrier &barrier) {
105 QObject::connect(sender, signal, &barrier, &Barrier::advance, Qt::SingleShotConnection);
119 BarrierKickerGetter m_barrierKicker;
#define QT_ASSERT(cond, action)
std::optional< DoneResult > result() const
void stopWithResult(DoneResult result)
\inheaderfile solutions/tasking/tasktree.h \inmodule TaskingSolution
\inheaderfile solutions/tasking/tasktree.h \inmodule TaskingSolution
Barrier * barrier() const
TASKING_EXPORT friend Group operator>>(const When &whenItem, const Do &doItem)
When(const BarrierKickerGetter &kicker)
\inmodule TaskingSolution
ExecutableItem signalAwaiter(const typename QtPrivate::FunctionPointer< Signal >::Object *sender, Signal signal)
ExecutableItem waitForBarrierTask(const MultiBarrier< Limit > &sharedBarrier)
Storage< SharedBarrier< Limit > > MultiBarrier