C/400

124. データ待ち行列を検査するには ?

他のトピックでデータ待ち行列 (*DTAQ) は読取ると同時に
データ待ち行列のデータそのものが消えてしまうことを紹介した。

確かにそのとおりであり、データ待ち行列 (*DTAQ) は
データを読取るとそのデータは消失してしまう。
では *DTAQ にデータが存在しているのか、確認する方法は
ないのだろうか?

ここで checkDTAQ という関数を紹介しよう。
実は *DTAQ を読取るときの 11 番目の任意パラメータ : Remove Message (char(10))
というのがリリース・アップで追加されていて

*YESThe message is removed from the data queue.
This is the default value if this parameter is not specified
*NOThe message is not removed from the data queue.

と追加されている。
つまり *NO であれば「メッセージは *DTAQ から削除されない」とある。
API : QRCVDTAQ の機能が拡張されているのである。

それを利用したのが次に紹介するサンプル関数: checkDTAQ である。
checkDTAQ は QTEMP/VTDTAQ *DTAQ にデータがあれば TRUE を返し、
データが何もなければ FALSE を返す。

【 サンプル関数 : checkDTAQ 】
/******************/
int checkDTAQ(void){
/******************/
  _Decimal(5,0) data_len = 0;
  _Decimal(5,0) wait = 0;
  _Decimal(3,0) key_len = 0;
  _Decimal(3,0) sender  = 0;
  _Decimal(5,0) data_rec= 0;
  char dataq_buf[100];

  QRCVDTAQ("VTDTAQ    ", "QTEMP     ", &data_len, &dataq_buf, wait,
           "  ", key_len, "", /*KEY*/
           sender, "", /*SENDER*/
           "*NO       ",
           data_rec, &errcode);
  if(data_len > 0) return TRUE;
  else  return FALSE;

}