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

#include "getDoneThread.h"

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

Public Member Functions

 ~GetDoneThread ()
 
virtual void run ()
 
void start ()
 
void stop ()
 
void getDone (NotifyGetRequesterPtr const &notifyGetRequester)
 

Static Public Member Functions

static GetDoneThreadPtr get ()
 

Detailed Description

Definition at line 47 of file getDoneThread.h.

Constructor & Destructor Documentation

epics::pvAccess::ca::GetDoneThread::~GetDoneThread ( )

Definition at line 40 of file getDoneThread.cpp.

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

Member Function Documentation

GetDoneThreadPtr epics::pvAccess::ca::GetDoneThread::get ( )
static

Definition at line 23 of file getDoneThread.cpp.

24 {
25  static GetDoneThreadPtr master;
26  static Mutex mutex;
27  Lock xx(mutex);
28  if(!master) {
29  master = GetDoneThreadPtr(new GetDoneThread());
30  master->start();
31  }
32  return master;
33 }
A lock for multithreading.
Definition: lock.h:36
epicsMutex Mutex
Definition: lock.h:28
std::tr1::shared_ptr< GetDoneThread > GetDoneThreadPtr
Definition: caChannel.h:48
void epics::pvAccess::ca::GetDoneThread::getDone ( NotifyGetRequesterPtr const &  notifyGetRequester)

Definition at line 67 of file getDoneThread.cpp.

68 {
69  {
70  Lock lock(mutex);
71  if(notifyGetRequester->isOnQueue) return;
72  notifyGetRequester->isOnQueue = true;
73  notifyGetQueue.push(notifyGetRequester);
74  }
75  waitForCommand.signal();
76 }
epicsMutexId lock
Definition: osiClockTime.c:37
A lock for multithreading.
Definition: lock.h:36
void epics::pvAccess::ca::GetDoneThread::run ( )
virtual

Definition at line 78 of file getDoneThread.cpp.

79 {
80  while(true)
81  {
82  waitForCommand.wait();
83  while(true) {
84  bool more = false;
85  NotifyGetRequester* notifyGetRequester(NULL);
86  {
87  Lock lock(mutex);
88  if(!notifyGetQueue.empty())
89  {
90  more = true;
91  NotifyGetRequesterWPtr req(notifyGetQueue.front());
92  notifyGetQueue.pop();
93  NotifyGetRequesterPtr reqPtr(req.lock());
94  if(reqPtr) {
95  notifyGetRequester = reqPtr.get();
96  reqPtr->isOnQueue = false;
97  }
98  }
99  }
100  if(!more) break;
101  if(notifyGetRequester!=NULL)
102  {
103  CAChannelGetPtr channelGet(notifyGetRequester->channelGet.lock());
104  if(channelGet) channelGet->notifyClient();
105  }
106  }
107  if(isStop) {
108  waitForStop.signal();
109  break;
110  }
111  }
112 }
epicsMutexId lock
Definition: osiClockTime.c:37
A lock for multithreading.
Definition: lock.h:36
#define NULL
Definition: catime.c:38
std::tr1::weak_ptr< NotifyGetRequester > NotifyGetRequesterWPtr
Definition: caChannel.h:47
std::tr1::shared_ptr< NotifyGetRequester > NotifyGetRequesterPtr
Definition: caChannel.h:45
std::tr1::shared_ptr< CAChannelGet > CAChannelGetPtr
Definition: caChannel.h:63
void epics::pvAccess::ca::GetDoneThread::start ( )

Definition at line 46 of file getDoneThread.cpp.

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

Definition at line 57 of file getDoneThread.cpp.

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

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