4#ifndef QOHOSMTBLOCKINGCALLSGATEWAY_H
5#define QOHOSMTBLOCKINGCALLSGATEWAY_H
18#include <QtCore/private/qohoscommon_p.h>
19#include <QtCore/qglobal.h>
21#include <condition_variable>
26#include <qohosplugincore.h>
33template<
typename SlaveContext>
46 QOhosConsumer<std::function<
void()>> masterThreadTasksExecutor,
47 QOhosConsumer<std::function<
void(SlaveContext &)>> slaveThreadTasksExecutor);
53 QOhosConsumer<SlaveContext &, std::function<
void()>> &&task);
59 struct MasterThreadTaskState
63 std::condition_variable resultSetCondVar;
67 QOhosConsumer<std::function<
void()>> masterThreadTasksExecutor,
68 QOhosConsumer<std::function<
void(SlaveContext &)>> slaveThreadTasksExecutor);
70 QOhosConsumer<std::function<
void()>> m_masterThreadTasksExecutor;
71 QOhosConsumer<std::function<
void(SlaveContext &)>> m_slaveThreadTasksExecutor;
72 std::mutex m_waitStateMutex;
73 bool m_masterWaiting =
false;
74 std::shared_ptr<MasterThreadTaskState> m_masterThreadTaskState;
77template<
typename SlaveContext>
87template<
typename SlaveContext>
89 QOhosConsumer<std::function<
void()>> masterThreadTasksExecutor,
90 QOhosConsumer<std::function<
void(SlaveContext &)>> slaveThreadTasksExecutor)
91 : m_masterThreadTasksExecutor(std::move(masterThreadTasksExecutor))
92 , m_slaveThreadTasksExecutor(std::move(slaveThreadTasksExecutor))
96template<
typename SlaveContext>
99 m_masterThreadTasksExecutor(std::move(task));
102template<
typename SlaveContext>
105 m_slaveThreadTasksExecutor(std::move(task));
108template<
typename SlaveContext>
141template<
typename SlaveContext>
std::enable_if_t< qohosplugincore_h_detail::isQOhosOptional< QOhosInvokeResult< Func, T > >, QOhosInvokeResult< Func, T > > andThen(Func &&func) const
JsState & jsState() const
virtual ~QAbilityEngine()
void runInSlaveThreadAndWaitForContinue(QOhosConsumer< SlaveContext &, std::function< void()> > &&task)
void invokeInSlaveThread(std::function< void(SlaveContext &)> &&task)
static std::shared_ptr< QOhosMtBlockingCallsGateway< SlaveContext > > makeInstance(QOhosConsumer< std::function< void()> > masterThreadTasksExecutor, QOhosConsumer< std::function< void(SlaveContext &)> > slaveThreadTasksExecutor)
void invokeInMasterThread(std::function< void()> &&task)
void * tryCastWithTypeIdObject(const void *matchTypeIdObject) final
static std::shared_ptr< QUiAbilityPeer > tryCastFromQAbilityPeerOrNull(std::shared_ptr< QAbilityPeer > qAbilityPeer)
~QUiAbilityPeer() override
void invokeInJsThread(std::function< void(JsState &)> task)
void dispatchNewWant(QNapi::Object want, QNapi::Object launchParam)
void removeMatchingJsQAbilityPeer(QNapi::Object qAbility)
void initJsThreadState(napi_env env, std::map< std::string, QNapi::Reference< QNapi::Function > > &&jsModulesFactories, std::shared_ptr< AppFunctions > appFunctions, QtRunMode qtRunMode)
Q_REQUIRED_RESULT bool tryInvokeInQtThreadAndTryWaitForContinue(std::function< void(std::function< void()>)> &&task, std::chrono::nanoseconds timeout)
void runInJsThreadAndWait(const std::function< void(JsState &)> &task)
void invokeInJsThreadAndWaitForContinue(std::function< void(JsState &, std::function< void()>)> &&task)
void addJsQAbilityPeer(std::shared_ptr< QAbilityPeer > qAbilityPeer)