diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp index 70910f8ed8a5bc998049cacfbb7892f65937a9c0..054aab91a71b20ebb4edca559ba65ae4975eea23 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 230ce91bf66a8e07b0ca5cca44772b0e5be4bb4e..dc3cbded0db943511337fc5383bedee08c0fa5cc 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;