X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=manager%2Fthread_util.cpp;fp=manager%2Fthread_util.cpp;h=2d12438f1857107da5ccc6e23b435d118deafa19;hp=0000000000000000000000000000000000000000;hb=f91a915d6f64f9d35e867d26e8ddb9c1b1ab0c1e;hpb=b41b9981c516c746a075e96aeeb3d7914617c713 diff --git a/manager/thread_util.cpp b/manager/thread_util.cpp new file mode 100644 index 0000000..2d12438 --- /dev/null +++ b/manager/thread_util.cpp @@ -0,0 +1,47 @@ +#include "thread_util.h" + +#include +#include + +using namespace std; + +pthread_mutex_t GetterThread::mutex = PTHREAD_MUTEX_INITIALIZER; + +void * GetterThread::GetMessage(void * p) +{ + + GetterThread * getter = (GetterThread*)(p); + + stringstream inputStream; + + char s = fgetc(getter->stream); + while (s != '\n' && s != EOF) + { + + inputStream << s; + s = fgetc(getter->stream); + } + if (s == EOF) + { + getter->buffer = ""; + getter->buffer += s; + return NULL; + } + + pthread_mutex_lock(&mutex); + getter->buffer = inputStream.str(); + pthread_mutex_unlock(&mutex); + + getter->finished = true; + + return NULL; +} + +void * TimerThread::Timeout(void * p) +{ + TimerThread * timer = (TimerThread*)(p); + usleep(timer->count); + timer->finished = true; + return NULL; +} +