BaseEvent.cpp
1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "BaseEvent.h"
#include <stdio.h>
CBaseEvent::CBaseEvent()
{
m_bIsSignaled = FALSE;
pthread_mutex_init(&m_mutex,NULL);
pthread_cond_init(&m_cond,NULL);
}
CBaseEvent::~CBaseEvent()
{
pthread_cond_destroy(&m_cond);
pthread_mutex_destroy(&m_mutex);
}
VOID CBaseEvent::ResetEvent()
{
/// @todo implement me
pthread_mutex_lock(&m_mutex);
m_bIsSignaled = FALSE;
pthread_mutex_unlock(&m_mutex);
}
INT32 CBaseEvent::Wait(UINT32 ui32TimeOut)
{
/// @todo implement me
pthread_mutex_lock(&m_mutex);
struct timespec absTime;
struct timeval curTime;
while (!m_bIsSignaled)
{
gettimeofday(&curTime,NULL);
absTime.tv_sec = curTime.tv_sec + ui32TimeOut / 1000;
absTime.tv_nsec = (curTime.tv_usec + (ui32TimeOut % 1000) * 1000) * 1000;
//absTime.tv_sec = curTime.tv_sec + ui32TimeOut / 1000000;
//absTime.tv_nsec = (curTime.tv_usec + ui32TimeOut % 1000000) * 1000;
absTime.tv_sec = absTime.tv_sec + absTime.tv_nsec / 1000000000;
absTime.tv_nsec = absTime.tv_nsec % 1000000000;
int res;
res = pthread_cond_timedwait(&m_cond,&m_mutex,&absTime);
if (res == ETIMEDOUT)
{
pthread_mutex_unlock(&m_mutex);
return CON_EVENT_TIME_OUT;
}
}
pthread_mutex_unlock(&m_mutex);
return CON_EVENT_GET_IT;
}
VOID CBaseEvent::SetEvent()
{
/// @todo implement me
pthread_mutex_lock(&m_mutex);
m_bIsSignaled = TRUE;
pthread_cond_broadcast(&m_cond);
pthread_mutex_unlock(&m_mutex);
}
VOID CBaseEvent::Wait()
{
/// @todo implement me
pthread_mutex_lock(&m_mutex);
while (!m_bIsSignaled)
{
pthread_cond_wait(&m_cond,&m_mutex);
}
pthread_mutex_unlock(&m_mutex);
}