This is Unofficial EPICS BASE Doxygen Site
caConnTest.cpp File Reference
#include <stdio.h>
#include <stdlib.h>
#include "cadef.h"
#include "epicsTime.h"
+ Include dependency graph for caConnTest.cpp:

Go to the source code of this file.

Macros

#define epicsAssertAuthor   "Jeff Hill johill@lanl.gov"
 

Functions

void caConnTestConnHandler (struct connection_handler_args args)
 
void caConnTest (const char *pNameIn, unsigned channelCountIn, double delayIn)
 

Variables

epicsTime begin
 

Macro Definition Documentation

#define epicsAssertAuthor   "Jeff Hill johill@lanl.gov"

Definition at line 13 of file caConnTest.cpp.

Function Documentation

void caConnTest ( const char *  pNameIn,
unsigned  channelCountIn,
double  delayIn 
)

Definition at line 58 of file caConnTest.cpp.

59 {
60  unsigned iteration = 0u;
61  int status;
62  unsigned i;
63  chid *pChans;
64 
65  channelCount = channelCountIn;
66 
67  pChans = new chid [channelCount];
68 
69  while ( 1 ) {
70  connCount = 0u;
71  subsequentConnect = false;
72  begin = epicsTime::getCurrent ();
73 
74  printf ( "initializing CA client library\n" );
75 
76  status = ca_task_initialize();
77  SEVCHK ( status, "CA init failed" );
78 
79  printf ( "creating channels\n" );
80 
81  for ( i = 0u; i < channelCount; i++ ) {
82  status = ca_search_and_connect ( pNameIn,
83  &pChans[i], caConnTestConnHandler, 0 );
84  SEVCHK ( status, "CA search problems" );
85  }
86 
87  printf ( "all channels were created\n" );
88 
89  ca_pend_event ( delayIn );
90 
91  if ( iteration & 1 ) {
92  for ( i = 0u; i < channelCount; i++ ) {
93  status = ca_clear_channel ( pChans[i] );
94  SEVCHK ( status, "ca_clear_channel() problems" );
95  }
96  printf ( "all channels were destroyed\n" );
97  }
98 
99  printf ( "shutting down CA client library\n" );
100 
101  status = ca_task_exit ();
102  SEVCHK ( status, "task exit problems" );
103 
104  iteration++;
105  }
106 
107  //delete [] pChans;
108 }
int epicsStdCall ca_task_exit()
Definition: access.cpp:251
pvd::Status status
int i
Definition: scan.c:967
int epicsStdCall ca_search_and_connect(const char *name_str, chid *chanptr, caCh *conn_func, void *puser)
Definition: access.cpp:279
#define printf
Definition: epicsStdio.h:41
epicsTime begin
Definition: caConnTest.cpp:22
int epicsStdCall ca_pend_event(ca_real timeout)
Definition: access.cpp:457
#define SEVCHK(CA_ERROR_CODE, MESSAGE_STRING)
Definition: cadef.h:137
int epicsStdCall ca_task_initialize(void)
Definition: access.cpp:166
int epicsStdCall ca_clear_channel(chid pChan)
Definition: access.cpp:363
void caConnTestConnHandler(struct connection_handler_args args)
Definition: caConnTest.cpp:24
void caConnTestConnHandler ( struct connection_handler_args  args)

Definition at line 24 of file caConnTest.cpp.

25 {
26  if ( args.op == CA_OP_CONN_UP ) {
27  if ( connCount == 0u ) {
28  if ( subsequentConnect ) {
29  printf ("the first channel connected\n");
30  begin = epicsTime::getCurrent ();
31  }
32  }
33  connCount++;
34  // printf ( "." );
35  // fflush ( stdout );
36  if ( connCount == channelCount ) {
37  epicsTime current = epicsTime::getCurrent ();
38  double delay = current - begin;
39  printf ( "all channels connected after %f sec ( %f sec per channel)\n",
40  delay, delay / channelCount );
41  }
42  }
43  else if ( args.op == CA_OP_CONN_DOWN ) {
44  if ( connCount == channelCount ) {
45  printf ( "channels are disconnected\n" );
46  subsequentConnect = true;
47  }
48  connCount--;
49  if ( connCount == 0u ) {
50  printf ( "all channels are disconnected\n" );
51  }
52  }
53  else {
54  assert ( 0 );
55  }
56 }
#define CA_OP_CONN_UP
Definition: cadef.h:128
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
#define printf
Definition: epicsStdio.h:41
epicsTime begin
Definition: caConnTest.cpp:22
#define CA_OP_CONN_DOWN
Definition: cadef.h:129

Variable Documentation

epicsTime begin

Definition at line 22 of file caConnTest.cpp.