#include "MonitorSignals.h" #include "MonitorLogging.h" using namespace std; MonitorBlockingSignal::MonitorBlockingSignal() { #ifdef WIN32 m_Handle = CreateEvent(NULL,FALSE,FALSE,NULL); if (m_Handle == NULL) { ThrowMonitorException("Win32 Eventhandle is null") ; } #else int res=pthread_cond_init (&m_ptCondition,NULL) ; res+=pthread_mutex_init( &m_ptLock, NULL) ; res+=pthread_mutex_lock(&m_ptLock) ; if (res!=0) { ThrowMonitorException("error initialising pthreads Condition/Mutex") ; } #endif FILE_LOG(logDEBUG1) << "Signal erstellt..." ; } MonitorBlockingSignal::~MonitorBlockingSignal() { #ifdef WIN32 if (m_Handle) CloseHandle(m_Handle) ; #else pthread_cond_destroy (&m_ptCondition) ; #endif } void MonitorBlockingSignal::ResetSignal() { #ifdef WIN32 if (m_Handle) ResetEvent(m_Handle) ; else ThrowMonitorException("Win32 Eventhandle is null") ; #else // pthread Gegenstueck ? #endif } void MonitorBlockingSignal::SetSignal() { FILE_LOG(logDEBUG1) << "Signal wird gesetzt" ; #ifdef WIN32 if (m_Handle) SetEvent(m_Handle); else ThrowMonitorException("Win32 Eventhandle is null") ; #else pthread_cond_signal(&m_ptCondition) ; #endif } void MonitorBlockingSignal::WaitForSignal() { FILE_LOG(logDEBUG1) << "Waiting for signal" ; #ifdef WIN32 if (m_Handle) WaitForSingleObject(m_Handle,INFINITE) ; else ThrowMonitorException("Win32 Eventhandle is null") ; #else pthread_cond_wait(&m_ptCondition,&m_ptLock) ; #endif FILE_LOG(logDEBUG1) << "Waiting for signal beendet" ; }