Actually, each entry of an i5/OS queue object (with object type hex 0A)
always occupies a fixed length of storage. As to a *DTAQ object, the
length is determined by the MAXLEN parameter when one creates a *DTAQ using
CL command CRTDTAQ. Realizing this fact is import to ones who want to put
variable formats of data on a queue object with large queue entry length.
In this case, a large amount of storage will be wasted if there're many
numbers of queue entries left undequeued on the queue object.
To confirm the fact metioned above, one can do a simple experiment on a
*DTAQ object.
1. Create a FIFO *DTAQ with entry length 65412, and with initial storage
allocated to hold only 1 entry.
CRTDTAQ DTAQ(Q16) MAXLEN(64512) SIZE(*MAX16MB 1) AUTORCL(*YES)
2. Check the size of the *DTAQ object, e.g.
DSPOBJD OBJ(Q16) OBJTYPE(*DTAQ) DETAIL(*FULL)
3. Enqueue the *DTAQ and then check the size of the *DTAQ respectively when
there're 1, 2, 65, and 66 entries on the *DTAQ.
Entries Obj Size in Bytes What's happening
0 69632 Initial size of *DTAQ
1 69632 The initial allocated storage for 1
entry is used.
2 4206592 Storage used by *DTAQ is extended to
hold next 64 entries
65 4206592
66 8339456 Storage used by *DTAQ is extended to
hold next 64 entries
To enqueue a *DTAQ for a given number of times conveniently, making use of
QShell commands might be considered, e.g.
n=1; while [ $n -le 64 ] ; do system "CALL PGM(QSNDDTAQ) PARM('Q16' '*LIBL'
X'00007F' 'Hello:p')"; n=$((n+1)); done
There's an article that discussed about i5/OS queue objects in details:
http://i5toolkit.sourceforge.net/art/page_using_q_en.html
HTH.
Regards!
date: Wed, 25 Nov 2009 12:01:15 -0500
from: Michael Ryan <michaelrtr@xxxxxxxxx>
subject: Re: Can a data queue have varying length entries?
Yes it can, and the received message size parameter tells you the length.
As an Amazon Associate we earn from qualifying purchases.