38.9.5.6 Prohibit Double
Calling API
API double calling
WinGP SDK prohibits calling another device access API during a
call to one device access API (Double calling). However, the device
access API is operating the message pump in the API, so if an event
happens, the user program starts.
In the course of the message processing routine, double calling
might occur when API is called.
The following shows a case resulting in double calling:
-
Double calling by touching two buttons
There are two buttons, A and B. If you press A, it calls the device
read API. If you press B, it calls the device write API.
In this case, if you press B button while calling the device read
API while pressing A button, the device write API is also called,
which leads to API double calling and an error results.
-
Double calling with a timer
A timer event is often used for cyclic processing in Windows
program. Program carefully for programs using the timer event;
otherwise, API double calling might result.
The following situations will cause errors when using the timer
event.
-
Call, read, and display the device read API
cyclically once every second.
-
Pressing the button calls the device write API and
writes the value into the device.
During reading triggered by a timer event in 1),
the 2) button is pressed and the 2) processing starts.
During the 2) writing, a timer event occurs and the 1) reading is
performed.
Solutions to avoid API double calling
The following shows solutions to avoid API double calling.
-
In the user program, improve the algorithm to
prevent API double calling.
For example,
-
Always cancel the timer at the start of the
timer processing routine and the button processing routine.
-
During a processing triggered by 1 button
pressed, ignore any other button pressed or if the button is
pressed again.
-
Do not process messages in the API
Call EasySetWaitType()
with the argument 2. In this case, other messages than that causing
double calling are not processed either, which may lead to other
problems such as the applications performing unintended
operations.
|