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

#include "channelConnectThread.h"

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

Public Member Functions

 ~ChannelConnectThread ()
 
virtual void run ()
 
void start ()
 
void stop ()
 
void channelConnected (NotifyChannelRequesterPtr const &notifyChannelRequester)
 

Static Public Member Functions

static ChannelConnectThreadPtr get ()
 

Detailed Description

Definition at line 47 of file channelConnectThread.h.

Constructor & Destructor Documentation

epics::pvAccess::ca::ChannelConnectThread::~ChannelConnectThread ( )

Definition at line 40 of file channelConnectThread.cpp.

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

Member Function Documentation

void epics::pvAccess::ca::ChannelConnectThread::channelConnected ( NotifyChannelRequesterPtr const &  notifyChannelRequester)

Definition at line 67 of file channelConnectThread.cpp.

69 {
70  {
71  Lock lock(mutex);
72  if(notifyChannelRequester->isOnQueue) return;
73  notifyChannelRequester->isOnQueue = true;
74  notifyChannelQueue.push(notifyChannelRequester);
75  }
76  waitForCommand.signal();
77 }
epicsMutexId lock
Definition: osiClockTime.c:37
A lock for multithreading.
Definition: lock.h:36
ChannelConnectThreadPtr epics::pvAccess::ca::ChannelConnectThread::get ( )
static

Definition at line 23 of file channelConnectThread.cpp.

24 {
25  static ChannelConnectThreadPtr master;
26  static Mutex mutex;
27  Lock xx(mutex);
28  if(!master) {
29  master = ChannelConnectThreadPtr(new ChannelConnectThread());
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< ChannelConnectThread > ChannelConnectThreadPtr
Definition: caChannel.h:34
void epics::pvAccess::ca::ChannelConnectThread::run ( )
virtual

Definition at line 79 of file channelConnectThread.cpp.

80 {
81  while(true)
82  {
83  waitForCommand.wait();
84  while(true) {
85  bool more = false;
86  NotifyChannelRequester* notifyChannelRequester(NULL);
87  {
88  Lock lock(mutex);
89  if(!notifyChannelQueue.empty())
90  {
91  more = true;
92  NotifyChannelRequesterWPtr req(notifyChannelQueue.front());
93  notifyChannelQueue.pop();
94  NotifyChannelRequesterPtr reqPtr(req.lock());
95  if(reqPtr) {
96  notifyChannelRequester = reqPtr.get();
97  reqPtr->isOnQueue = false;
98  }
99  }
100  }
101  if(!more) break;
102  if(notifyChannelRequester!=NULL)
103  {
104  CAChannelPtr channel(notifyChannelRequester->channel.lock());
105  if(channel) channel->notifyClient();
106  }
107  }
108  if(isStop) {
109  waitForStop.signal();
110  break;
111  }
112  }
113 }
epicsMutexId lock
Definition: osiClockTime.c:37
std::tr1::weak_ptr< NotifyChannelRequester > NotifyChannelRequesterWPtr
std::tr1::shared_ptr< NotifyChannelRequester > NotifyChannelRequesterPtr
Definition: caChannel.h:37
A lock for multithreading.
Definition: lock.h:36
#define NULL
Definition: catime.c:38
std::tr1::shared_ptr< CAChannel > CAChannelPtr
Definition: caChannel.h:31
void epics::pvAccess::ca::ChannelConnectThread::start ( )

Definition at line 46 of file channelConnectThread.cpp.

47 {
48  thread = std::tr1::shared_ptr<epicsThread>(new epicsThread(
49  *this,
50  "channelConnectThread",
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::ChannelConnectThread::stop ( )

Definition at line 57 of file channelConnectThread.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: