diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2017-02-02 15:14:11 +0100 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2017-02-03 11:06:23 +0000 |
commit | f07c94c0037a2e9a51b8177edb757063206e00cc (patch) | |
tree | afc3377215f89a4bcbcc4168bc0ff124873b853e | |
parent | 69c8d41f90cc9d0c77a512615896b8c5b9eec83f (diff) |
winrt: Register callbacks in Xaml thread
Change-Id: Ib32af0803e95229a1671055da4d5608f3fd3e0f6
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
-rw-r--r-- | src/bluetooth/qbluetoothserver_winrt.cpp | 16 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_winrt.cpp | 24 |
2 files changed, 26 insertions, 14 deletions
diff --git a/src/bluetooth/qbluetoothserver_winrt.cpp b/src/bluetooth/qbluetoothserver_winrt.cpp index 28ab7e53..d37fc9e3 100644 --- a/src/bluetooth/qbluetoothserver_winrt.cpp +++ b/src/bluetooth/qbluetoothserver_winrt.cpp @@ -43,6 +43,7 @@ #include "qbluetoothsocket_p.h" #include <QtCore/QLoggingCategory> +#include <QtCore/private/qeventdispatcher_winrt_p.h> #include <qfunctions_winrt.h> #include <windows.networking.h> @@ -156,11 +157,16 @@ bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port) return false; HRESULT hr; - hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_StreamSocketListener).Get(), - &d->socketListener); - Q_ASSERT_SUCCEEDED(hr); - hr = d->socketListener->add_ConnectionReceived(Callback<ClientConnectedHandler>(d, &QBluetoothServerPrivate::handleClientConnection).Get(), - &d->connectionToken); + hr = QEventDispatcherWinRT::runOnXamlThread([d, this] () + { + HRESULT hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Networking_Sockets_StreamSocketListener).Get(), + &d->socketListener); + Q_ASSERT_SUCCEEDED(hr); + hr = d->socketListener->add_ConnectionReceived(Callback<ClientConnectedHandler>(d, &QBluetoothServerPrivate::handleClientConnection).Get(), + &d->connectionToken); + Q_ASSERT_SUCCEEDED(hr); + return S_OK; + }); Q_ASSERT_SUCCEEDED(hr); //We can not register an actual Rfcomm port, because the platform does not allow it diff --git a/src/bluetooth/qbluetoothsocket_winrt.cpp b/src/bluetooth/qbluetoothsocket_winrt.cpp index 855af16d..fb0587cc 100644 --- a/src/bluetooth/qbluetoothsocket_winrt.cpp +++ b/src/bluetooth/qbluetoothsocket_winrt.cpp @@ -167,15 +167,21 @@ public slots: public: void startReading() { - ComPtr<IBuffer> buffer; - HRESULT hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer); - Q_ASSERT_SUCCEEDED(hr); - ComPtr<IInputStream> stream; - hr = m_socket->get_InputStream(&stream); - Q_ASSERT_SUCCEEDED(hr); - hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, m_initialReadOp.GetAddressOf()); - Q_ASSERT_SUCCEEDED(hr); - hr = m_initialReadOp->put_Completed(Callback<SocketReadCompletedHandler>(this, &SocketWorker::onReadyRead).Get()); + HRESULT hr; + hr = QEventDispatcherWinRT::runOnXamlThread([this]() + { + ComPtr<IBuffer> buffer; + HRESULT hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer); + Q_ASSERT_SUCCEEDED(hr); + ComPtr<IInputStream> stream; + hr = m_socket->get_InputStream(&stream); + Q_ASSERT_SUCCEEDED(hr); + hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, m_initialReadOp.GetAddressOf()); + Q_ASSERT_SUCCEEDED(hr); + hr = m_initialReadOp->put_Completed(Callback<SocketReadCompletedHandler>(this, &SocketWorker::onReadyRead).Get()); + Q_ASSERT_SUCCEEDED(hr); + return S_OK; + }); Q_ASSERT_SUCCEEDED(hr); } |