diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2015-09-03 12:39:10 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2015-09-06 06:03:43 +0000 |
commit | d4ef6dcaf4eb9a65e928e8a94e1218ed6549ecad (patch) | |
tree | dd162ffe9b0e1136f85abfd7a5bab5062817eea1 /src/plugins/canbus/socketcan/socketcanbackend.cpp | |
parent | 304c1da155996d41bd847d9aeaa2405076cae30f (diff) |
Optimize the CAN frames receiving
We do not need to emit a signal when each frame is received,
this increases the load of the event loop. The input FIFO can
contains more than one frame, thus we only need to emit the
signal when all current frames were read.
In this case this signal is renamed to framesReceived instead
of frameReceived.
Change-Id: If97cfd4304dae9549748f87dbd0b54eae4c0a0f2
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/plugins/canbus/socketcan/socketcanbackend.cpp')
-rw-r--r-- | src/plugins/canbus/socketcan/socketcanbackend.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/plugins/canbus/socketcan/socketcanbackend.cpp b/src/plugins/canbus/socketcan/socketcanbackend.cpp index 0b2801d..e72ab3d 100644 --- a/src/plugins/canbus/socketcan/socketcanbackend.cpp +++ b/src/plugins/canbus/socketcan/socketcanbackend.cpp @@ -445,6 +445,8 @@ QString SocketCanBackend::interpretErrorFrame(const QCanBusFrame &errorFrame) void SocketCanBackend::readSocket() { + QVector<QCanBusFrame> newFrames; + while (true) { struct canfd_frame frame; int bytesReceived = 0; @@ -487,8 +489,10 @@ void SocketCanBackend::readSocket() load.insert(i, frame.data[i]); bufferedFrame.setPayload(load); - enqueueReceivedFrame(bufferedFrame); + newFrames.append(bufferedFrame); } + + enqueueReceivedFrames(newFrames); } QT_END_NAMESPACE |