From: email@example.com [mailto:firstname.lastname@example.org] On Behalf Of Jay Steele
Sent: Monday, August 15, 2011 4:23 PM
Subject: question about ca_get, ca_pend_io timeout in EPICS client with Windows XP multi-threading
Hi EPICS folks,
I have some questions regarding an EPICS client and multi-threading on WINDOWS. Let me start by
laying out the development environment.
I am developing an interface to an EPICS motor record using the CA API.
I am using base 18.104.22.168. I am compiling under Windows XP using Visual Studio
2008. I have successfully compiled all necessary components this way. I
know that there are no issues with the compiling because all of the
utilities and executables generated by the base are functional. My interface is
being generated in a GUI application for Windows XP. When I
start the program, the main process thread instantiates a class which
contains all of my EPICS related code. This class will connect to the
various PVs I require and store their chid objects for future access.
For initialization, I call these functions from the main task.
int nRet = ca_context_create(ca_enable_preemptive_callback);
m_pEPICSContext = ca_current_context();
I then go on to do other necessary steps for my program and eventually I
complete startup. Once startup has completed, there is a spawned thread
which will go to my EPICS class at a specified interval and retrieve new
data from the EPICS motors. This thread is priority THREAD_PRIORITY_ABOVE_NORMAL, is attached
to the main task’s context using ca_attach_context(m_pEPICSContext),
and periodically calls ca_get, then ca_pend_io to retrieve the motor data. I use
a 5 second timeout value for ca_pend_io. This normally works to successfully retrieve the motor data.
However, when I launch another thread at priority THREAD_PRIORITY_ABOVE_NORMAL, and this thread keeps the CPU busy,
then for some reason the ca_pend_io function returns with timeout
(User specified timeout on IO operation expired). The WINDOWS O/S appears to swap CPU time between the two ABOVE_NORMAL priority threads,
But the ca_pend_io function still time outs. Is this expected behavior? Does the low level functionality in ca_pend_io run at a
low priority, so that it will timeout? Would the ca_get_callback function work better for this situation?
The information in this email, including any attachments, is confidential and intended only for the recipient(s) listed. Any use of this email for any other purpose is prohibited. If you have received this email in error, please notify me immediately by reply email, delete this email, and do not disclose its contents to anyone.