diff options
author | Joerg Bornemann <joerg.bornemann@nokia.com> | 2011-12-13 12:09:45 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-15 19:17:04 +0100 |
commit | 3ccd6264296a3d5b1652964c758cbd1063c8c8f2 (patch) | |
tree | 6d5b8f07fc56ca49cf56e55fb0f382b0fe37b3f5 /src/network | |
parent | abccefa4a8fffda13d3873b8e0c60259d75a75e9 (diff) |
QLocalSocket/Win: make emitReadyRead timer persistent
This saves us from creating a single shot timer every time we emit
readyRead and eliminates the parallel pendingReadyRead flag.
Done-with: ossi
Change-Id: I1de7f07b83b583b9d60dd8862d6a9f7865b5b891
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/socket/qlocalsocket.h | 1 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_p.h | 3 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_win.cpp | 25 |
3 files changed, 9 insertions, 20 deletions
diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h index 698c06377b..a30f37011a 100644 --- a/src/network/socket/qlocalsocket.h +++ b/src/network/socket/qlocalsocket.h @@ -134,7 +134,6 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_notified()) Q_PRIVATE_SLOT(d_func(), void _q_canWrite()) Q_PRIVATE_SLOT(d_func(), void _q_pipeClosed()) - Q_PRIVATE_SLOT(d_func(), void _q_emitReadyRead()) #else Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QAbstractSocket::SocketState)) Q_PRIVATE_SLOT(d_func(), void _q_error(QAbstractSocket::SocketError)) diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index a0749fd35f..32781789b0 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -134,7 +134,6 @@ public: void _q_notified(); void _q_canWrite(); void _q_pipeClosed(); - void _q_emitReadyRead(); DWORD checkPipeState(); void startAsyncRead(); bool completeAsyncRead(); @@ -148,7 +147,7 @@ public: QWinEventNotifier *dataReadNotifier; QLocalSocket::LocalSocketError error; bool readSequenceStarted; - bool pendingReadyRead; + QTimer *emitReadyReadTimer; bool pipeClosed; static const qint64 initialReadBufferSize = 4096; #else diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index 5d64479106..cb4d50d658 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -50,6 +50,9 @@ QT_BEGIN_NAMESPACE void QLocalSocketPrivate::init() { Q_Q(QLocalSocket); + emitReadyReadTimer = new QTimer(q); + emitReadyReadTimer->setSingleShot(true); + QObject::connect(emitReadyReadTimer, SIGNAL(timeout()), q, SIGNAL(readyRead())); memset(&overlapped, 0, sizeof(overlapped)); overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); dataReadNotifier = new QWinEventNotifier(overlapped.hEvent, q); @@ -108,7 +111,7 @@ QLocalSocketPrivate::QLocalSocketPrivate() : QIODevicePrivate(), actualReadBufferSize(0), error(QLocalSocket::UnknownSocketError), readSequenceStarted(false), - pendingReadyRead(false), + emitReadyReadTimer(0), pipeClosed(false), state(QLocalSocket::UnconnectedState) { @@ -236,13 +239,10 @@ qint64 QLocalSocket::readData(char *data, qint64 maxSize) void QLocalSocketPrivate::checkReadyRead() { if (actualReadBufferSize > 0) { - if (!pendingReadyRead) { - Q_Q(QLocalSocket); - QTimer::singleShot(0, q, SLOT(_q_emitReadyRead())); - pendingReadyRead = true; - } + if (!emitReadyReadTimer->isActive()) + emitReadyReadTimer->start(); } else { - pendingReadyRead = false; + emitReadyReadTimer->stop(); } } @@ -516,19 +516,10 @@ void QLocalSocketPrivate::_q_notified() return; } startAsyncRead(); - pendingReadyRead = false; + emitReadyReadTimer->stop(); emit q->readyRead(); } -void QLocalSocketPrivate::_q_emitReadyRead() -{ - if (pendingReadyRead) { - Q_Q(QLocalSocket); - pendingReadyRead = false; - emit q->readyRead(); - } -} - quintptr QLocalSocket::socketDescriptor() const { Q_D(const QLocalSocket); |