diff --git a/src/WSServer.cpp b/src/WSServer.cpp index 5230f482..15fa0afd 100644 --- a/src/WSServer.cpp +++ b/src/WSServer.cpp @@ -25,6 +25,7 @@ with this program. If not, see #include #include #include +#include #include "WSServer.h" #include "obs-websocket.h" @@ -127,6 +128,8 @@ void WSServer::stop() _connections.clear(); _connectionProperties.clear(); + _threadPool.waitForDone(); + while (!_server.stopped()) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } @@ -166,7 +169,7 @@ void WSServer::onMessage(connection_hdl hdl, server::message_ptr message) return; } - QtConcurrent::run([=]() { + QtConcurrent::run(&_threadPool, [=]() { std::string payload = message->get_payload(); QMutexLocker locker(&_clMutex); diff --git a/src/WSServer.h b/src/WSServer.h index 8147ca4f..e9faf885 100644 --- a/src/WSServer.h +++ b/src/WSServer.h @@ -22,6 +22,7 @@ with this program. If not, see #include #include #include +#include #include #include @@ -54,6 +55,9 @@ public: void start(quint16 port); void stop(); void broadcast(std::string message); + QThreadPool* threadPool() { + return &_threadPool; + } private: static WSServerPtr _instance; @@ -71,4 +75,5 @@ private: std::set> _connections; std::map> _connectionProperties; QMutex _clMutex; + QThreadPool _threadPool; };