diff --git a/breadcrumbs/include/DataSyncThread.hpp b/breadcrumbs/include/DataSyncThread.hpp index 0f1f8a2..52ea144 100644 --- a/breadcrumbs/include/DataSyncThread.hpp +++ b/breadcrumbs/include/DataSyncThread.hpp @@ -44,6 +44,7 @@ class DataSyncThread // Synchronous functions (only called from thread) void threadRuntime(); + bool readyToReceive(int interval = 1); static DWORD threadInit(LPVOID pThreadArgs) { DataSyncThread* pDataSyncThread = (DataSyncThread*)pThreadArgs; diff --git a/breadcrumbs/src/comms/DataSyncThread.cpp b/breadcrumbs/src/comms/DataSyncThread.cpp index 5b73147..1c89fbc 100644 --- a/breadcrumbs/src/comms/DataSyncThread.cpp +++ b/breadcrumbs/src/comms/DataSyncThread.cpp @@ -16,8 +16,9 @@ void DataSyncThread::threadRuntime() { printf("Waiting to receive bytes\n"); + if (!readyToReceive()) + continue; - // Master while loop that will receive incoming messages char commandByte; iResult = recvBytes(&commandByte, 1); if (iResult <= 0) @@ -58,6 +59,19 @@ void DataSyncThread::threadRuntime() threadRunning = false; } +bool DataSyncThread::readyToReceive(int interval) +{ + fd_set fds; + FD_ZERO(&fds); + FD_SET(sock, &fds); + + timeval tv; + tv.tv_sec = interval; + tv.tv_usec = 0; + + return (select(sock + 1, &fds, 0, 0, &tv) == 1); +} + int DataSyncThread::recvBytes(void* buffer, size_t numBytes) { size_t bytesRecved = 0; diff --git a/breadcrumbs/src/main/VirtualOutputProcessor.cpp b/breadcrumbs/src/main/VirtualOutputProcessor.cpp index 3af1a19..7c5befc 100644 --- a/breadcrumbs/src/main/VirtualOutputProcessor.cpp +++ b/breadcrumbs/src/main/VirtualOutputProcessor.cpp @@ -1,5 +1,6 @@ #include "DataSyncThread.hpp" +#include int main() @@ -8,9 +9,12 @@ int main() client.connectToAlgorithm("localhost"); client.startComms(); - char testValue = 'a'; - Attribute attrib = *new Attribute("testKey1", 1, &testValue); - client.sendAttribute(attrib); + for (int i = 0; i < 10; i++) + { + char testValue = 'a' + i; + Attribute attrib("testKey1", 1, &testValue); + client.sendAttribute(attrib); + } client.stopComms();