From cf6ed08c98329a95dfc974fdc175a6c3d90b42ad Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Tue, 28 Jul 2009 15:54:17 +0200 Subject: [PATCH] Don't read single bytes in native mode. --- tests/manual/trk/adapter.cpp | 23 +++++++++++++++++++++-- tests/manual/trk/launcher.cpp | 23 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp index 70910f8ed8a..054aab91a71 100644 --- a/tests/manual/trk/adapter.cpp +++ b/tests/manual/trk/adapter.cpp @@ -41,6 +41,25 @@ #if USE_NATIVE #include <windows.h> + +// Non-blocking replacement for win-api ReadFile function +BOOL WINAPI TryReadFile(HANDLE hFile, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + LPDWORD lpNumberOfBytesRead, + LPOVERLAPPED lpOverlapped) +{ + COMSTAT comStat; + if(!ClearCommError(hFile, NULL, &comStat)){ + qDebug() << "ClearCommError() failed"; + return FALSE; + } + return ReadFile(hFile, + lpBuffer, + qMin(comStat.cbInQue, nNumberOfBytesToRead), + lpNumberOfBytesRead, + lpOverlapped); +} #endif #ifdef Q_OS_UNIX @@ -873,11 +892,11 @@ void Adapter::tryTrkRead() // << stringFromArray(m_trkReadQueue); #if USE_NATIVE - const DWORD BUFFERSIZE = 1; + const DWORD BUFFERSIZE = 1024; char buffer[BUFFERSIZE]; DWORD charsRead; - while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) { + while (TryReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) { m_trkReadQueue.append(buffer, charsRead); if (isValidTrkResult(m_trkReadQueue)) break; diff --git a/tests/manual/trk/launcher.cpp b/tests/manual/trk/launcher.cpp index 230ce91bf66..dc3cbded0db 100644 --- a/tests/manual/trk/launcher.cpp +++ b/tests/manual/trk/launcher.cpp @@ -41,6 +41,25 @@ #if USE_NATIVE #include <windows.h> + +// Non-blocking replacement for win-api ReadFile function +BOOL WINAPI TryReadFile(HANDLE hFile, + LPVOID lpBuffer, + DWORD nNumberOfBytesToRead, + LPDWORD lpNumberOfBytesRead, + LPOVERLAPPED lpOverlapped) +{ + COMSTAT comStat; + if(!ClearCommError(hFile, NULL, &comStat)){ + qDebug() << "ClearCommError() failed"; + return FALSE; + } + return ReadFile(hFile, + lpBuffer, + qMin(comStat.cbInQue, nNumberOfBytesToRead), + lpNumberOfBytesRead, + lpOverlapped); +} #endif #ifdef Q_OS_UNIX @@ -342,11 +361,11 @@ void Adapter::trkWrite(const TrkMessage &msg) void Adapter::tryTrkRead() { #if USE_NATIVE - const DWORD BUFFERSIZE = 1; + const DWORD BUFFERSIZE = 1024; char buffer[BUFFERSIZE]; DWORD charsRead; - while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) { + while (TryReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) { m_trkReadQueue.append(buffer, charsRead); if (isValidTrkResult(m_trkReadQueue)) break; -- GitLab