Hi,
Correct, a single-threaded CA client code must periodically spend some time in ca_pend_event() in order that the channels will connect. The channels will not transition from a disconnected to a connected state if your main thread doesn't periodically call ca_pend_event. The ca_pend_event(), among other tasks, arranges for the incoming TCP messages to be processed, and calls the user callbacks.
The ca_flush_io() call is forcing all of the en-queued put/get/subscribe requests to be delivered to the TCP circuits in aggregate, but does not necessarily process the incoming messages on the TCP circuits, or call the connection callbacks.
Jeff
> -----Original Message-----
> From: Florian Feldbauer [mailto:[email protected]]
> Sent: Monday, April 02, 2012 8:05 AM
> To: Hill, Jeffrey O
> Cc: EPICS tech talk
> Subject: Re: What is void* puser in ca_create_channel
>
> Hey,
>
> after creating all channels and subscriptions I used ca_flush_io() in my
> program as
> mentioned in the talk "Channel Access Client Programming" from Dirk
> Zimoch at the last
> EPICS meeting at PSI.
> When I use ca_pend_event() instead, the CA is working.
>
> Best regards,
> Florian
>
>
> On 03/30/2012 04:10 PM, Hill, Jeffrey O wrote:
> >> Just one other question: Can I use the CA methods ca_create_channel and
> >> ca_create_subscription within a c++ class?
> > Yes, the necessary 'extern"C"' bracketing is in the ca header files so
> that its C interface can be called from C++.
> >
> >> Any idea based on this few information, or should I post my code?
> > If the CA client and its IOC are not on the same subnet then you may
> need to add the IOC's address to the EPICS_CA_ADDR_LIST environment
> variable for the client. Otherwise, if they are intended to be on the same
> subnet them make certain that both hosts are configured with the same
> subnet mask.
> >
> > There are also some additional suggestions in the troubleshooting
> section of the CA reference manual.
> >
> > Jeff
> >
> >> -----Original Message-----
> >> From: Florian Feldbauer [mailto:[email protected]]
> >> Sent: Friday, March 30, 2012 6:29 AM
> >> To: Hill, Jeffrey O
> >> Cc: EPICS tech talk
> >> Subject: Re: What is void* puser in ca_create_channel
> >>
> >> Thanks for your answers.
> >>
> >> Just one other question: Can I use the CA methods ca_create_channel and
> >> ca_create_subscription within a c++ class?
> >> The project we are working on should use OO techniques.
> >> We need not only an interface to EPICS, but also to a simulation.
> >> So we wanted to have an abstract base class, which is used by the rest
> >> of our project, and derived classes for the implementation of
> >> the individual "control systems". One derived class would contain the
> CA
> >> for EPICS and another the interface to our simulation.
> >>
> >> I can compile my test program for this object-structure, but I don't
> get
> >> a conncetion to my EPICS ioc.
> >> The two examples from makeBaseApp.pl are working correctly.
> >>
> >> Any idea based on this few information, or should I post my code?
> >>
> >> Best regards,
> >> Florian
> >>
> >> On 03/29/2012 05:19 PM, Hill, Jeffrey O wrote:
> >>> Hi,
> >>>
> >>> The puser pointer you pass to ca_create_channel is saved by the
> library
> >> with the channel and is later supplied as a puser argument to your
> channel
> >> connectione state update callback function. There is also a ca function
> >> "void * ca_puser ( CHID )" that will return the puser pointer that was
> >> supplied when the channel was created.
> >>> Likewise, the puser pointer you pass to ca_create_subscription is
> saved
> >> by the library with the subscription and is later supplied as a puser
> >> argument to your subscription update callback function.
> >>>> How does this parameter have to look like?
> >>>> Can I use a C-Struct with any member I want to have (even members
> which
> >>>> are not for the CA, but for another part of my program)? Are there
> any
> >>>> members which are mandatory? (like value or chid)
> >>> A pointer to any data structure can be used. The CA library does not
> in
> >> any way access, or place any restrictions on the content of, this user
> >> application private data structure. The user application is of course
> >> responsible for allocation, initialization, maintenance, and de-
> allocation
> >> (proper cleanup) of this data structure.
> >>> Use of void pointers passed to callbacks is an old technique which is
> >> roughly equivalent to a virtual function in modern software interfaces,
> >> BTW.
> >>> HTH, and feel free to send any other questions that you might have,
> and
> >> I will do my best to answer them.
> >>> Jeff
> >>>
> >>>> -----Original Message-----
> >>>> From: [email protected] [mailto:tech-talk-
> >> [email protected]]
> >>>> On Behalf Of Florian Feldbauer
> >>>> Sent: Thursday, March 29, 2012 4:01 AM
> >>>> To: EPICS tech talk
> >>>> Subject: What is void* puser in ca_create_channel
> >>>>
> >>>> Dear all,
> >>>>
> >>>> I currently write a CA Client that should monitor all measured
> >>>> temperatures in my experiment
> >>>> to regulate the chillers.
> >>>> This is my first try to program a CA Client, and I have a question
> >>>> concerning this:
> >>>>
> >>>> The ca_create_channel and the ca_create_subscription methods both
> have
> >>>> a parameter void* puser. How does this parameter have to look like?
> >>>> Can I use a C-Struct with any member I want to have (even members
> which
> >>>> are not
> >>>> for the CA, but for another part of my program)? Are there any
> members
> >>>> which are mandatory? (like value or chid)
> >>>>
> >>>> In the camonitor.c example generated with makeBaseApp.pl this puser
> is
> >>>> just a pointer to a C-Struct containing
> >>>> a c-string value, the chid and evid of the channel.
> >>>>
> >>>> Best regards,
> >>>> Florian
> >>>>
> >>>> --
> >>>> -------------------------------------
> >>>> | Florian Feldbauer |
> >>>> | Ph.D. student |
> >>>> | |
> >>>> | Institut für Experimentalphysik I |
> >>>> | Ruhr-Universität Bochum |
> >>>> | Universitätsstr. 150 |
> >>>> | D-44780 Bochum |
> >>>> | |
> >>>> | Office: NB 2/173 |
> >>>> | Phone: (+49)234 / 32-23538 |
> >>>> | Fax: (+49)234 / 32-14170 |
> >>>> | Web: http://www.ep1.rub.de |
> >>>> -------------------------------------
> >>
> >> --
> >> -------------------------------------
> >> | Florian Feldbauer |
> >> | Ph.D. student |
> >> | |
> >> | Institut für Experimentalphysik I |
> >> | Ruhr-Universität Bochum |
> >> | Universitätsstr. 150 |
> >> | D-44780 Bochum |
> >> | |
> >> | Office: NB 2/173 |
> >> | Phone: (+49)234 / 32-23538 |
> >> | Fax: (+49)234 / 32-14170 |
> >> | Web: http://www.ep1.rub.de |
> >> -------------------------------------
>
>
> --
> -------------------------------------
> | Florian Feldbauer |
> | Ph.D. student |
> | |
> | Institut für Experimentalphysik I |
> | Ruhr-Universität Bochum |
> | Universitätsstr. 150 |
> | D-44780 Bochum |
> | |
> | Office: NB 2/173 |
> | Phone: (+49)234 / 32-23538 |
> | Fax: (+49)234 / 32-14170 |
> | Web: http://www.ep1.rub.de |
> -------------------------------------
- Replies:
- Re: What is void* puser in ca_create_channel Dirk Zimoch
- References:
- What is void* puser in ca_create_channel Florian Feldbauer
- RE: What is void* puser in ca_create_channel Hill, Jeffrey O
- Re: What is void* puser in ca_create_channel Florian Feldbauer
- RE: What is void* puser in ca_create_channel Hill, Jeffrey O
- Re: What is void* puser in ca_create_channel Florian Feldbauer
- Navigate by Date:
- Prev:
ITER distribution 3.0 Di Maio Franck
- Next:
RE: casStrmClient.cc error: invalid channel identifier Hill, Jeffrey O
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
<2012>
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re: What is void* puser in ca_create_channel Florian Feldbauer
- Next:
Re: What is void* puser in ca_create_channel Dirk Zimoch
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
<2012>
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|