This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::ca::MonitorEventThread Class Reference

#include "monitorEventThread.h"

+ Inheritance diagram for epics::pvAccess::ca::MonitorEventThread:
+ Collaboration diagram for epics::pvAccess::ca::MonitorEventThread:

Public Member Functions

 ~MonitorEventThread ()
 
virtual void run ()
 
void start ()
 
void stop ()
 
void event (NotifyMonitorRequesterPtr const &notifyMonitorRequester)
 

Static Public Member Functions

static MonitorEventThreadPtr get ()
 

Detailed Description

Definition at line 47 of file monitorEventThread.h.

Constructor & Destructor Documentation

epics::pvAccess::ca::MonitorEventThread::~MonitorEventThread ( )

Definition at line 40 of file monitorEventThread.cpp.

41 {
42 //std::cout << "MonitorEventThread::~MonitorEventThread()\n";
43 }

Member Function Documentation

void epics::pvAccess::ca::MonitorEventThread::event ( NotifyMonitorRequesterPtr const &  notifyMonitorRequester)

Definition at line 66 of file monitorEventThread.cpp.

67 {
68  {
69  Lock lock(mutex);
70  if(notifyMonitorRequester->isOnQueue) return;
71  notifyMonitorRequester->isOnQueue = true;
72  notifyMonitorQueue.push(notifyMonitorRequester);
73  }
74  waitForCommand.signal();
75 }
epicsMutexId lock
Definition: osiClockTime.c:37
A lock for multithreading.
Definition: lock.h:36
MonitorEventThreadPtr epics::pvAccess::ca::MonitorEventThread::get ( )
static

Definition at line 23 of file monitorEventThread.cpp.

24 {
25  static MonitorEventThreadPtr master;
26  static Mutex mutex;
27  Lock xx(mutex);
28  if(!master) {
29  master = MonitorEventThreadPtr(new MonitorEventThread());
30  master->start();
31  }
32  return master;
33 }
std::tr1::shared_ptr< MonitorEventThread > MonitorEventThreadPtr
Definition: caChannel.h:42
A lock for multithreading.
Definition: lock.h:36
epicsMutex Mutex
Definition: lock.h:28
void epics::pvAccess::ca::MonitorEventThread::run ( )
virtual

Definition at line 77 of file monitorEventThread.cpp.

78 {
79  while(true)
80  {
81  waitForCommand.wait();
82  while(true) {
83  bool more = false;
84  NotifyMonitorRequester* notifyMonitorRequester(NULL);
85  {
86  Lock lock(mutex);
87  if(!notifyMonitorQueue.empty())
88  {
89  more = true;
90  NotifyMonitorRequesterWPtr req(notifyMonitorQueue.front());
91  notifyMonitorQueue.pop();
92  NotifyMonitorRequesterPtr reqPtr(req.lock());
93  if(reqPtr) {
94  notifyMonitorRequester = reqPtr.get();
95  reqPtr->isOnQueue = false;
96  }
97  }
98  }
99  if(!more) break;
100  if(notifyMonitorRequester!=NULL)
101  {
102  CAChannelMonitorPtr channelMonitor(notifyMonitorRequester->channelMonitor.lock());
103  if(channelMonitor) channelMonitor->notifyClient();
104  }
105  }
106  if(isStop) {
107  waitForStop.signal();
108  break;
109  }
110  }
111 }
epicsMutexId lock
Definition: osiClockTime.c:37
A lock for multithreading.
Definition: lock.h:36
#define NULL
Definition: catime.c:38
std::tr1::shared_ptr< NotifyMonitorRequester > NotifyMonitorRequesterPtr
Definition: caChannel.h:40
std::tr1::shared_ptr< CAChannelMonitor > CAChannelMonitorPtr
Definition: caChannel.h:66
std::tr1::weak_ptr< NotifyMonitorRequester > NotifyMonitorRequesterWPtr
void epics::pvAccess::ca::MonitorEventThread::start ( )

Definition at line 45 of file monitorEventThread.cpp.

46 {
47  thread = std::tr1::shared_ptr<epicsThread>(new epicsThread(
48  *this,
49  "monitorEventThread",
52  thread->start();
53 }
LIBCOM_API unsigned int epicsStdCall epicsThreadGetStackSize(epicsThreadStackSizeClass size)
Definition: osdThread.c:466
#define epicsThreadPriorityLow
Definition: epicsThread.h:75
void epics::pvAccess::ca::MonitorEventThread::stop ( )

Definition at line 55 of file monitorEventThread.cpp.

56 {
57  {
58  Lock xx(mutex);
59  isStop = true;
60  }
61  waitForCommand.signal();
62  waitForStop.wait();
63 }
A lock for multithreading.
Definition: lock.h:36

The documentation for this class was generated from the following files: