Blame view

src/Common/BaseEvent.cpp 1.73 KB
e30d6793   Zou XiKun   v0.0.1
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
  #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);
  }