4#ifndef QEVENTDISPATCHER_WASM_P_H
5#define QEVENTDISPATCHER_WASM_P_H
19#include "private/qtimerinfo_unix_p.h"
20#include <QtCore/qloggingcategory.h>
21#include <QtCore/qwaitcondition.h>
28#include <emscripten/proxying.h>
42 bool processEvents(QEventLoop::ProcessEventsFlags
flags)
override;
48 bool unregisterTimer(
int timerId)
override;
49 bool unregisterTimers(
QObject *
object)
override;
51 int remainingTime(
int timerId)
override;
53 void interrupt()
override;
54 void wakeUp()
override;
57 bool *selectForRead,
bool *selectForWrite,
bool *socketDisconnect);
59 virtual bool processPostedEvents();
62 bool isMainThreadEventDispatcher();
63 bool isSecondaryThreadEventDispatcher();
66 void handleApplicationExec();
67 void handleDialogExec();
69 bool wakeEventDispatcherThread();
70 static void callProcessPostedEvents(
void *eventDispatcher);
73 void updateNativeTimer();
74 static void callProcessTimers(
void *eventDispatcher);
76 static void setEmscriptenSocketCallbacks();
77 static void clearEmscriptenSocketCallbacks();
78 static void socketError(
int fd,
int err,
const char* msg,
void *
context);
79 static void socketOpen(
int fd,
void *
context);
80 static void socketListen(
int fd,
void *
context);
81 static void socketConnection(
int fd,
void *
context);
82 static void socketMessage(
int fd,
void *
context);
83 static void socketClose(
int fd,
void *
context);
85 static void setSocketState(
int socket,
bool setReadyRead,
bool setReadyWrite);
86 static void clearSocketState(
int socket);
87 void waitForSocketState(
int timeout,
int socket,
bool checkRead,
bool checkWrite,
88 bool *selectForRead,
bool *selectForWrite,
bool *socketDisconnect);
90 static void run(std::function<
void(
void)> fn);
91 static void runAsync(std::function<
void(
void)> fn);
92 static void runOnMainThread(std::function<
void(
void)> fn);
93 static void runOnMainThreadAsync(std::function<
void(
void)> fn);
97 bool m_interrupted =
false;
98 bool m_processTimers =
false;
99 bool m_pendingProcessEvents =
false;
103 std::chrono::milliseconds m_timerTargetTime{};
107 bool m_wakeUpCalled =
false;
108 std::condition_variable m_moreEvents;
111 static std::mutex g_staticDataMutex;
112 static emscripten::ProxyingQueue g_proxyingQueue;
113 static pthread_t g_mainThread;
120 static std::multimap<int, QSocketNotifier *> g_socketNotifiers;
122 struct SocketReadyState {
125 bool waitForReadyWrite =
false;
126 bool readyRead =
false;
127 bool readyWrite =
false;
129 static std::map<int, SocketReadyState> g_socketState;
DarwinBluetooth::LECBManagerNotifier * notifier
Combined button and popup list for selecting options.
#define Q_DECLARE_LOGGING_CATEGORY(name)
GLbitfield GLuint64 timeout
[4]
device waitForReadyRead(deadline)
socketLayer waitForWrite()