The Question is:
We have many processes the communicate with each other via Mailboxes. One
reader, one writer.
I would like to monitor these mailboxes, to see the number of records that have
been read in a mailbox, and those not read. That way we can obtain summary
info for enquiries.
I dont see how to read a mailbox without removing the record from it, which
would of course mean that the normal reading process would not read it. It
also doesnt answer the problem of how to access the total number of records
processed so far.
Is what i want possible ?
The Answer is :
The device I/O operation count is an option here, and this is available
Alternatively, there are $qio function codes such as IO$_SENSEMODE that
can be of interest. From the OpenVMS I/O user's reference manual:
4.3.7 Get Mailbox Information
The get mailbox information function allows the user to find out the
number of unread messages and bytes in the mailbox. The following
function code is provided:
IO$_SENSEMODE---Get mailbox contents information
Also please see SYS$EXAMPLES:MBX$SDA.C for another potential approach.
Also see topics (1661) for general programming information, and please
see topics (1937), (5045), (5199) and (7359) for previous discussions
of mailbox-related programming and considerations -- as was stated in
topic (5199), the OpenVMS Wizard prefers to use only uni-directional
mailboxes, with exactly one reader and zero or more writers. This
greatly simplifies the programming and the debugging effort, as there
is no need to "turn around" the message traffic. It also means that
inserting additional mailboxes and message monitors into the message
traffic is easier.
The OpenVMS Wizard would tend to compartment the communications
traffic into a set of subroutines, as this makes maintenance and
support and debugging and monitoring easier. Most any reasonable
and thoughtful design for this application-specific API can also
ease the effort involved in adding new communications transports
into the application.